我想将行添加到我的关系表中,其中将更新旧行并添加新行。这是我的查询(ID 是唯一的键):
INSERT INTO table_rel (ID, player, team, status) VALUES (1,1,1,0), (2,3,1,1)
ON DUPLICATE KEY UPDATE status=VALUES(status);
我应该用什么来代替应该创建的行中的 ID?例如。 (假,2,1,1)
最佳答案
如果这是针对 AUTO_INCRMENT 列,您可以提供 NULL
值。
最简单的方法是使用关键字 NULL
INSERT INTO table_rel (ID, player, team, status) VALUES
(1,1,1,0)
,(2,3,1,1)
,(NULL,6,1,0)
^^^^
还有很多其他表达式可以用来返回 NULL 值。
<小时/>演示为 AUTO_INCRMENT 列提供 NULL 关键字,以及提供非 NULL 值的其他行:
CREATE TABLE foo
( id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY
, mi VARCHAR(5)
) ENGINE=INNODB;
;
INSERT INTO foo (id, mi) VALUES
(1,'1')
,(NULL,'too')
;
-- 2 row(s) affected
INSERT INTO foo (id, mi) VALUES
(1,'one')
,(NULL,'three')
,(2,'two')
ON DUPLICATE KEY
UPDATE mi = VALUES(mi)
;
-- 5 row(s) affected
SELECT * FROM foo
;
-- id mi
-- --- ------
-- 1 one
-- 2 two
-- 3 three
关于mysql - 如何对旧行和新行执行 INSERT ... ON DUPLICATE KEY UPDATE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39906745/