MySQL在插入更新列之前触发,具有新的自动增量ID

时间:2013-08-23 10:23:27

标签: mysql sql

我想使用国家/地区代码更新表格中的列,并使用新的id作为自动增量值。

BEGIN
SET new.key = concat(new.countryCode,new.id);
END

countryCode工作正常,但id始终为空。我怎样才能实现这样的目标? id来自autoincrement列。

我知道它不起作用,因为它是在插入后生成的。那我怎么能这样做呢?

1 个答案:

答案 0 :(得分:4)

AUTO_INCREMENT列仅在插入后设置

如果您需要访问该值,则只能在AFTER INSERT触发器中。但是,您无法修改 AFTER UPDATE触发器中的列值...

此外,您无法对AFTER INSERT触发器中使用的表格执行更新(http://dev.mysql.com/doc/refman/5.0/en/stored-program-restrictions.html):

  

在存储的函数或触发器中,不允许修改a   已经被使用(用于读或写)的表   调用函数或触发器的语句。


这里唯一合理的解决方案是创建一个存储过程来更新表,调整事务中的相关列以“模拟”你的原子插入语句。


话虽如此,在您的特定情况下key列是多余的,因为该列只是同一行中另外两列的串联。

鉴于其名称,您不是在寻找创建复合键的方法吗?这样的事情:

ALTER TABLE tbl ADD UNIQUE KEY (countryCode, id);