mysql - 如何对旧行和新行执行 INSERT ... ON DUPLICATE KEY UPDATE?

标签 mysql insert-update

我想将行添加到我的关系表中,其中将更新旧行并添加新行。这是我的查询(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/

相关文章:

hadoop - 如何将文本文件中的数据覆盖到配置单元表中以替换特定日期或特定值

mysql - 通过插入来自另一个表的外键计数来更新表

mysql - Sequelize 中的 findAll() 找不到在事务中创建的行

php - 在一个进程中在不同表中插入和更新

javascript - 将集合映射到 upsert 到数据库中。如何批量更新插入?

MySQL 不区分大小写但区分重音 UTF8 唯一键

ruby-on-rails - Rails - 单个表单上多个模型的用户输入 - 如何

mysql - 如果 Node js存在mysql中则忽略更新数据

php - 通过 php 将 MYSQL 数据导出到 Excel/CSV

mysql - 在多个数据表上生成唯一的 AI ID