使用 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 返回 1 [重复]