我现在无法对此进行测试,但是我对答案很好奇。
如果我在表 A 上有一个触发器将新记录写入表 B,会LAST_INSERT_ID()
告诉我更新的ID
A 或 B吗?我对 MySQL 和 PHP 都很好奇,但我的理解是 PHP 只是调用 MySQL 的实现。
如果 B 通常返回 A,我如何获取 B 的最后插入的 ID,反之亦然?
来自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)