我有表 1,其中 id 作为自动增量。 表 2 与表 1 有外键关系,我需要将表 1 生成的值插入表 2
-- Trigger DDL Statements
DELIMITER $$
USE `baemer_emr`$$
CREATE TRIGGER `baemer_emr`.`after_insert_log` AFTER INSERT ON `baemer_emr`.`table1`
FOR EACH ROW
BEGIN
INSERT INTO table2 VALUES (last_insert_id() , something);
END$$
它正在工作,但显示的是之前的数字。例如
插入表 1,id = 15。在表 2 中返回 14。有什么想法吗?
最佳答案
在触发器中,您有 2 个虚拟表,称为 NEW
和 OLD
您可以使用这些虚拟表来获取新插入的值。
OLD
虚拟表显然只适用于 UPDATE
和 DELETE
触发器。
并且 DELETE 触发器没有 NEW
表。
-- Trigger DDL Statements
DELIMITER $$
USE `baemer_emr`$$
CREATE TRIGGER after_insert_log AFTER INSERT ON table1
FOR EACH ROW
BEGIN
INSERT INTO table2 VALUES (NEW.id, something);
END$$
请注意 NEW.id
_(假设 id 是一个 auto_increment 字段)_ 尚未 在 before insert
触发器中设置,只是要避免的小陷阱之一。
关于php - MySQL 触发器 last_insert_id(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7715197/