我有一个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表1,那么之后将调用mysqli_insert_id()
。
这会返回表1中的新ID吗?还是log_table中的新ID?
LAST_INSERT_ID()
将返回(INSERT语句的)表1中的新ID,而不是(触发器的)log_table中的ID。
LAST_INSERT_ID:的手册部分对此进行了说明
在存储的例程(过程或函数)或触发器,LAST_INSERT_ID()的值的更改方式与在这类对象的主体之外执行的语句。这个存储的例程或触发器对的值的影响以下语句所看到的LAST_INSERT_ID()取决于程序类型:
如果存储过程执行的语句更改LAST_INSERT_ID(),后面的语句可以看到更改后的值过程调用。
对于更改值的存储函数和触发器,值为当函数或触发器结束时恢复,因此以下语句不会看到更改的值