在MySQL中,REPLACE INTO查询是否可以使用LAST_INSERT_ID函数?
基本上,我必须插入一个表,只有它不存在的地方,但然后以任何方式插入第二个表,并使用第一个表的外键约束。
所以即。
REPLACE INTO TABLE1(NAME) VALUES('unique');
SET @table1_id = LAST_INSERT_ID();
INSERT INTO TABLE2(TABLE1_ID, VALUE) VALUES(@table1_id, 'Test Value');
这是否会在插入和更新中同时发挥作用?
答案 0 :(得分:1)
是的,REPLACE INTO
查询会影响 LAST_INSERT_ID()
函数的结果。
Documentation 声明:
<块引用>REPLACE
与 INSERT
完全相同 工作,但如果表中的旧行与 PRIMARY KEY 或 UNIQUE 索引的新行具有相同的值,在插入新行之前删除旧行。
这意味着如果 INSERT
影响 LAST_INSERT_ID()
,那么 REPLACE
也应该这样做。
我已经用 MySQL 8 测试过了。
答案 1 :(得分:0)
这是一个古老的问题,但是由于尚无答案...
问题在于REPLACE INTO
没有设置LAST_INSERT_ID
。而是使用:
INSERT INTO TABLE1 (NAME) VALUES ('unique')
ON DUPLICATE KEY UPDATE NAME = LAST_INSERT_ID(VALUES(NAME));
INSERT INTO TABLE2(TABLE1_ID, VALUE) VALUES(LAST_INSERT_ID(), 'Test value');
假设自动递增位于NAME
列上。如果自动递增位于另一列(例如ID),则必须将其更改为
ON DUPLICATE KEY UPDATE ID = LAST_INSERT_ID(VALUES(ID)), NAME = VALUES(NAME);
请注意,INSERT INTO ... ON DUPLICATE KEY ...
和REPLACE INTO ...
之间的差异不仅仅是最后一个插入ID。例如,在具有多个唯一键的表中,REPLACE INTO
可以用一个新行替换多个现有行。