BEFORE UPDATE触发器是否影响mysqli_insert_id结果?

时间:2014-09-17 16:54:40

标签: php mysql last-insert-id

我有一个附加了触发器的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?

1 个答案:

答案 0 :(得分:0)

在INSERT语句之后调用的

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

LAST_INSERT_ID的手册部分记录了这一点:

  

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

     
      
  • 如果存储过程执行更改其值的语句   LAST_INSERT_ID(),后面的语句可以看到更改后的值   程序电话。

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

  •