MySQL:数据不存在则insert,存在则update

郎家岭伯爵 2023年08月25日 456次浏览

前言

有这样的应用场景:如果该数据在表中不存在则插入数据,如果存在则更新它的数据列。

例如在如下用户表中,用户不存在(注意唯一索引 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 的效果。