SQL 表数据的增删操作详解
1. 增
1.1 CREATE
CREATE 语句用于创建数据表。
1.2 全列插入
全列插入指为表中的每一列都提供值。
1.3 指定列插入
指定列插入只给部分列赋值,未指定的列默认为 NULL。
1.4 插入否则更新(ON DUPLICATE KEY UPDATE)
具体语法:
INSERT ... ON DUPLICATE KEY UPDATE column = value [, column = value] ...
当插入的主键或唯一键值已存在时,直接报错。使用此指令可在冲突时更新现有行。
1.5 替换(REPLACE)
主键 或者 唯一键 没有冲突,则直接插入;
主键 或者 唯一键 如果冲突,则删除后再插入
若无冲突则直接插入。若冲突则先删除旧行再插入新行。可通过受影响行数判断:1 表示插入,2 表示删除后插入。
1.7 duplicate 和 replace 的区别
1.7.1 核心操作逻辑不同
- REPLACE:冲突时先删除旧行,再插入新行。等价于 DELETE + INSERT。
- ON DUPLICATE KEY UPDATE:冲突时不删除,直接更新指定字段。等价于 UPDATE。
1.7.2 对自增主键的影响不同
- REPLACE:生成新的自增 ID,原有 ID 废弃。
- ON DUPLICATE KEY UPDATE:保持原有自增 ID 不变。
1.7.3 对未指定字段的处理不同
- REPLACE:未指定字段使用默认值,覆盖原值。
- ON DUPLICATE KEY UPDATE:未指定字段保持原值不变。
1.7.4 示例对比
假设表 student 有数据 (id=1, name='Tom', score=80)。
使用 ON DUPLICATE KEY UPDATE:
INSERT INTO student (name, score) VALUES ('Tom', 90) ON DUPLICATE KEY UPDATE score = (score);


