php - MySQL 触发器 last_insert_id()

标签 php mysql

我有表 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 个虚拟表,称为 NEWOLD 您可以使用这些虚拟表来获取新插入的值。
OLD 虚拟表显然只适用于 UPDATEDELETE 触发器。
并且 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/

相关文章:

php - apache 2.4.7 虚拟主机上的多个 php/symfony2 应用程序

没有 php 的 PHPBB3 大量用户删除

php - Mysql添加重复的varchar

mysql - 按上次发送的消息对用户分组

mysql - 子查询在我的代码中返回超过 1 行

php - IF 语句在哪里(codeigniter 事件记录)

php - 在 twitter API PHP 中解析主题标签

php - magento自定义模块 Controller 无法获取toHtml()函数

php - 将值设置为 NULL 而不是 'NULL'

mysql - 什么样的 JOIN 语句可以从 3 个表中检索到正确的数据?