【发布时间】:2011-12-06 06:41:17
【问题描述】:
我的 MySQL 数据库中有一个内容表(一个 Drupal 内容表,值得一提),它有一个自动递增的主键 nid。我希望能够实现一个奇偶 id 解决方案,其中在生产中创建的内容具有偶数 id,而在开发上创建的内容具有奇数 id,以避免同步时的 id 冲突。不幸的是,MySQL 不支持序列,或每个表的自动增量增量值(即仅对 db.node 增量 2,而不是 1)。
我能想到的最佳解决方案是使用 BEFORE INSERT 和 AFTER INSERT 触发器,在 BEFORE INSERT 触发器中将 auto_increment_increment 的会话值设置为 2,然后在 AFTER INSERT 触发器中将其重置为 1。由于它只设置会话变量,它不应该对其他进程产生任何影响,而且由于它是一个 Drupal CMS 表并且没有发生任何复杂的事情,所以它看起来很安全,即使感觉不对。
但是,我是一名中级 MySQL 管理员(充其量是 :)),正如我所说,这肯定让人觉得很老套,所以我想我会把它放在那里,看看是否有人对此有任何强烈的负面反应,也许一些我没有预见到的问题。 (我想如果没有人这样做,那么也许其他人会觉得这很有用)。
【问题讨论】:
-
感谢您的链接,我检查了它,我很幸运我(尚未)处于复制情况,看起来很复杂:)。我希望避免全局更改 auto_increment_increment,尽管这肯定会起作用并且是最安全的。我正在将 Drupal 用于前端 CMS,但可以说是在 Drupal “背后”做一些分析工作,并希望将标准设置保留在那里。可能会这样,但我希望这个触发解决方案是可行的。再次感谢。
标签: mysql drupal-6 triggers sync auto-increment