MySQL 基础教程

MySQL 高级教程

MySQL SQL 语句

MySQL 笔记

MySQL 插入数据记录时,若存在则做更新(或者忽略此次操作)

MySQL 笔记 MySQL 笔记


我们在开发中,会经常在离线任务或者一次性导数据操作时,对 MySQL 表做插入数据记录时,如果对应的唯一键存在,就做更新数据操作或者忽略此次添加数据动作。

插入数据,存在(表明唯一键冲突)则更新

INSERT INTO table (id, name, age) VALUES 
(1, "B", 29) 
ON DUPLICATE KEY UPDATE 
name="B",
age=29

当插入数据至 table 表的主键字段(也是唯一键)id 值冲突时,执行 ON DUPLICATE KEY 后面的 UPDATE 操作。

如果批量操作,可以如下:

INSERT INTO table (a, b, c) VALUES 
(1, 2, 3),
(4, 5, 6),
(7, 8, 9),
ON DUPLICATE KEY UPDATE
a = VALUES(a),
b = VALUES(b),
c = VALUES(c)

此外,还需要了解的是,如果最终是插入操作,受影响行的值为 1;如果是更新操作,受到影响行的值为 2;如果更新的数据和已有的数据一样(就相当于没变,所有值保持不变),受到影响的行的值为 0。

还有另一种方式 replace into 操作,该方法本质上是先操作 delete 操作,然后再执行 insert 操作,如果插入的表除了自增主键,还有唯一键时,该方法执行后主键 id 会变化,这一点需要了解。

插入数据,存在(表明唯一键冲突)则忽略

INSERT IGNORE INTO table (id, name, age) VALUES 
(1, "B", 29)

在正常的 INSERT 语句中增加了 IGNORE 关键字,当主键 primary index 或唯一索引(unique index)冲突时,忽略此次插入操作。