4

我想用国家代码和新id的自动增量值更新表中的列。

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

countryCode工作正常,但id总是空白。我怎样才能实现这样的目标?来自idautoincrement列。

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

4

1 回答 1

4

AUTO_INCREMENT列仅插入后设置。

如果你需要访问那个值,你只能在一个AFTER INSERT触发器中。但是,您不能修改AFTER UPDATE 触发器中的列值...

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

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


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


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

鉴于它的名字,你不是在寻找一种方法来创建复合键吗?像这样的东西:

ALTER TABLE tbl ADD UNIQUE KEY (countryCode, id);
于 2013-08-23T10:27:06.487 回答