我有一个附加了触发器的mysql表,它将此表中的更改记录到第二个
CREATE TRIGGER log_table BEFORE UPDATE ON table1
FOR EACH ROW BEGIN
INSERT INTO log_table(filed) VALUES(NEW.field);
END;
//
现在,如果我从PHP执行INSERT INTO table1,之后调用mysqli_insert_id()
。
是否会返回table1中的新ID?或者log_table中的新ID?
答案 0 :(得分:0)
LAST_INSERT_ID()
将返回table1(INSERT语句)中的新ID,而不是log_table(触发器)中的新ID。
LAST_INSERT_ID的手册部分记录了这一点:
在存储例程(过程或函数)的主体内或者 触发器,LAST_INSERT_ID()的值以与更改相同的方式更改 在这些对象的主体之外执行的语句。该 存储例程或触发器对值的影响 以下语句看到的LAST_INSERT_ID()取决于 常规:
如果存储过程执行更改其值的语句 LAST_INSERT_ID(),后面的语句可以看到更改后的值 程序电话。
对于存储的更改值的函数和触发器,值为 当函数或触发器结束时恢复,因此遵循以下语句 不会看到更改的值。