触发器如何影响 last_insert_id()?

And*_*rew 5 mysql trigger

我现在无法对此进行测试,但是我对答案很好奇。

如果我在表 A 上有一个触发器将新记录写入表 B,会LAST_INSERT_ID()告诉我更新的IDA 或 B吗?我对 MySQL 和 PHP 都很好奇,但我的理解是 PHP 只是调用 MySQL 的实现。

如果 B 通常返回 A,我如何获取 B 的最后插入的 ID,反之亦然?

a1e*_*x07 4

来自mysql 文档

通过以下语句看到的存储例程或触发器对 LAST_INSERT_ID() 值的影响取决于例程的类型:
....
对于更改值的存储函数和触发器,当函数或触发器结束,因此以下语句看不到更改的值。(在 MySQL 5.0.12 之前,该值不会恢复,并且以下语句确实会看到更改的值。)

因此,A 上的触发器内部发生的任何事情都不会影响 LAST_INSERT_ID()触发器主体外部执行的返回值。使用触发器主体LAST_INSERT_ID将反映您对另一个表所做的插入。要获取 B 的最后一个 id,您需要存储LAST_INSERT_ID()某处的值(新表或​​ A 中的新列),例如,

delimiter /

CREATE trigger biA before insert on A
for each row

begin
 insert into B(name) values('aaa');
 set new.b_id := (select last_insert_id());
end;
/
Run Code Online (Sandbox Code Playgroud)