使用 LAST_INSERT_ID 插入

Posted

技术标签:

【中文标题】使用 LAST_INSERT_ID 插入【英文标题】:Insert using LAST_INSERT_ID 【发布时间】:2016-02-27 03:10:44 【问题描述】:

如何在递增和使用 LAST_INSERT_ID 的同时进行插入?我有一个表和触发器:

CREATE TABLE A(
    id int NOT NULL AUTO_INCREMENT,
    name char(15),
    PRIMARY KEY(id)
);

CREATE TABLE B(
    id int NOT NULL,
    name char(15),
    FOREIGN KEY(id) REFERENCES A(id)
);

delimiter //

CREATE TRIGGER T
AFTER INSERT ON B
FOR EACH ROW 
BEGIN
     IF (NEW.name LIKE 'A') THEN
          INSERT INTO A VALUES(LAST_INSERT_ID() + 1, 'A');
     END IF;
END//

delimiter ;

我知道 INSERT INTO B VALUES(LAST_INSERT_ID() + 1, 'A'); 在 B 中有多个插入时不起作用,因为 LAST_INSERT_ID() 在进行多行插入时,LAST_INSERT_ID() 将返回插入的第一行(不是最后一行)的值。我将如何增加 ID 以便 LAST_INSERT_ID() 从插入返回最新的 ID `

【问题讨论】:

【参考方案1】:

如果你想插入来自B的id,那么使用id列:

CREATE TRIGGER T
AFTER INSERT ON B
FOR EACH ROW 
BEGIN
     IF (NEW.name LIKE 'A') THEN
          INSERT INTO A VALUES(B.ID + 1, 'A');
     END IF;
END//

这似乎是一个奇怪的表达。也许您的真正意图只是在两个表上都有一个自动递增的 id。

【讨论】:

有了这个,我第一次插入(其中 name = 'A'),我得到主键重复条目的错误。 @贾斯汀。 . .我怀疑你想在A 中有一个自动递增的列。 是的,A中的ID自动递增,B中的ID引用A中的ID【参考方案2】:

我意识到我可以在没有 id 的情况下插入 A,因为它是自动递增的。

【讨论】:

以上是关于使用 LAST_INSERT_ID 插入的主要内容,如果未能解决你的问题,请参考以下文章

插入指向错误的 last_insert_id() 后触发

插入许多行,LAST_INSERT_ID 返回 1 [重复]

如何选择last_insert_id?

PHP - 插入并将 LAST_INSERT_ID() 保存到变量中

SELECT LAST_INSERT_ID() *更新

MYSQL:存储过程,插入一行,然后通过 LAST_INSERT_ID() 选择它