使用触发器在MySQL中伪造表上的自动增量增量

时间:2011-10-12 16:00:24

标签: mysql drupal-6 triggers sync auto-increment

我的MySQL数据库中有一个内容表(一个Drupal内容表,它的价值),它有一个自动递增的主键nid。我希望能够实现奇怪甚至是id的解决方案,其中在生产中创建的内容具有偶数ID,并且在dev上创建的内容具有奇怪的ID,以避免在我同步时的ID冲突。不幸的是,MySQL不支持序列或每表自动增量增量值(即仅对db.node增加2,而不是1)。

我能想到的最好的解决方案是有一个BEFORE INSERT和AFTER INSERT触发器,它在BEFORE INSERT触发器中将auto_increment_increment的会话值设置为2,然后在AFTER INSERT触发器中将其重置为1。因为它只设置会话变量,所以它不会对其他进程产生任何影响,因为它是一个Drupal CMS表并且没有发生任何复杂的事情,所以看起来很安全,即使它感觉不对。

然而,我是一个中间的MySQL管理员(充其量:))正如我所说它肯定感觉很乱,所以我想我会把它放在那里看看是否有人对此有任何强烈的负面反应,也许我不预料到的一些问题。 (我想如果没有人那么也许其他人会觉得这很有用)。

1 个答案:

答案 0 :(得分:0)

以下是您想要做的一个简单示例 - 假设有一个整数列'seq' 在'my_table_name'表中:

DROP trigger my_trigger_name;  

CREATE TRIGGER my_trigger_name
BEFORE INSERT ON my_table_name
FOR EACH ROW
SET NEW.seq = (select ifnull(max(seq)+1,1) from source_table_name);