Mysql 5.0 LAST_INSERT_ID() 升级到 5.6 后有所不同

Posted

技术标签:

【中文标题】Mysql 5.0 LAST_INSERT_ID() 升级到 5.6 后有所不同【英文标题】:Mysql 5.0 LAST_INSERT_ID() differs after upgrading to 5.6 【发布时间】:2015-04-15 13:28:23 【问题描述】:

mysql 5.0 迁移到 5.6,我注意到 INSERT_LAST_ID() 函数在触发器内部使用时表现不同。

我的简化情况:

表A有一个(插入后)触发器:插入表_B(ID)值(LAST_INSERT_ID());

表 B 具有外键:CONSTRAINT table_B FOREIGN KEY (ID) REFERENCES Table_A (ID) ON DELETE CASCADE ON UPDATE RESTRICT

此触发器-外键组合在 5.0 下工作正常。迁移到 5.6 后,这些触发器具有其他行为。

现在触发器中使用的函数 LAST_INSERT_ID() 似乎得到 0(零),第二次得到 Primarykey-1。

我已经在网上搜索过,但没有进一步了解。

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

没错,5.0 的行为不同于 5.1 或更高版本。该建议将对后触发器应用以下更改:

-- insert into table_B (ID) values(LAST_INSERT_ID());
insert into table_B (ID) values (NEW.ID);

【讨论】:

非常感谢,这就像一个魅力,虽然它有点奇怪 LAST_INSERT_ID 函数的行为不同。 @user3415259:是的,非常奇怪的行为。我打开了一个错误报告Bug #76715。

以上是关于Mysql 5.0 LAST_INSERT_ID() 升级到 5.6 后有所不同的主要内容,如果未能解决你的问题,请参考以下文章

LAST_INSERT_ID() MySQL

转 mysql中的LAST_INSERT_ID()分析

Mysql 存储过程返回 LAST_INSERT_ID 为零

MySQL 从存储过程中检索 last_insert_id

mysql @@identity 与 sql-server last_insert_id()

MySQL 触发器 last_insert_id()