前言
有这样的应用场景:如果该数据在表中不存在则插入数据,如果存在则更新它的数据列。
例如在如下用户表中,用户不存在(注意唯一索引 code
)则创建一个新的用户,如果存在则更新其它的数据列。
CREATE TABLE user202308 (
`id` INT PRIMARY KEY NOT NULL AUTO_INCREMENT COMMENT '自增ID',
`code` VARCHAR ( 100 ) NOT NULL COMMENT '用户编码',
`user_name` VARCHAR ( 255 ) DEFAULT NULL COMMENT '用户名',
`password` VARCHAR ( 255 ) DEFAULT NULL COMMENT '密码',
`age` TINYINT DEFAULT NULL COMMENT '年龄',
`status` TINYINT NOT NULL DEFAULT 0 COMMENT '状态:1-正常;99-删除',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
UNIQUE KEY ( `code` )
) ENGINE = INNODB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = "用户信息表";
实现
理论
ON DUPLICATE KEY UPDATE
,这是一个 MySQL 特有的子句,表示如果插入操作发生唯一键冲突,就执行更新操作。
实现
INSERT INTO user202308 (`code`, `user_name`, `password`, `age`)
VALUES ('20230825', 'langjilaing', '123456', '25')
ON DUPLICATE KEY UPDATE
`user_name` = VALUES(`user_name`),
`password` = VALUES(`password`),
`age` = VALUES(`age`);
注:
- 唯一键
UNIQUE KEY(code)
也可也使用多个字段组成联合唯一键。
效果
总结
使用 MySQL 的 ON DUPLICATE KEY UPDATE
可实现如果数据不存在则 insert,如果存在则 update 的效果。