0

我有一个 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 table1mysqli_insert_id()之后会调用。

这会返回 table1 中的新 ID 吗?还是 log_table 中的新 ID?

4

1 回答 1

0

LAST_INSERT_ID()在 INSERT 语句之后调用将返回 table1(INSERT 语句的)中的新 ID,而不是 log_table(触发器)中的 ID。

这记录在LAST_INSERT_ID的手册部分中:

在存储例程(过程或函数)或触发器的主体内,LAST_INSERT_ID() 的值更改方式与在这些类型的对象主体外执行的语句相同。以下语句看到的存储例程或触发器对 LAST_INSERT_ID() 值的影响取决于例程的类型:

  • 如果存储过程执行更改 LAST_INSERT_ID() 值的语句,则更改后的值会被过程调用之后的语句看到。

  • 对于更改值的存储函数和触发器,该值在函数或触发器结束时恢复,因此以下语句不会看到更改的值。

于 2014-09-17T19:48:38.247 回答