MYSQL之ON DUPLICATE KEY UPDATE使用

本文介绍如何在MySQL中创建包含联合唯一索引的表,并使用ON DUPLICATE KEY UPDATE特性来实现数据的高效更新。通过具体实例展示了如何避免在插入重复数据时发生错误,并自动更新已存在的记录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

创建表

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(32) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `userName` varchar(32) NOT NULL COMMENT '用户名',
  `passWord` varchar(50) NOT NULL COMMENT '密码',
  `realName` varchar(32) DEFAULT NULL COMMENT '真实名',
  `is_settlement` tinyint(1) DEFAULT '0' COMMENT '结算状态',
  `uniq1` varchar(255) NOT NULL,
  `uniq2` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `uniq` (`uniq1`,`uniq2`) USING BTREE COMMENT '联合唯一索引'
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

表插入数据

INSERT INTO `user` (`userName`, `passWord`, `realName`, `is_settlement`, `uniq1`, `uniq2`) VALUES ('1', '1', '1', '0', '1', '1');
INSERT INTO `user` (`userName`, `passWord`, `realName`, `is_settlement`, `uniq1`, `uniq2`) VALUES ('2', '2', '3', '0', '2', '2');
INSERT INTO `user` (`userName`, `passWord`, `realName`, `is_settlement`, `uniq1`, `uniq2`) VALUES ('3', '3', '3', '0', '3', '3');

使用ON DUPLICATE KEY UPDATE

利用联合唯一索引"uniq",当唯一索引存在时,更新记录中其他字段值;不存在时添加一条记录

INSERT INTO `user` (
	`userName`,
	`passWord`,
	`realName`,
	`is_settlement`,
	`uniq1`,
	`uniq2`
)
VALUES
	(
		'用户名',
		'密码',
		'真实名',
		'0',
		'1',
		'1'
	) ON DUPLICATE KEY UPDATE 
	`userName` = VALUES(`userName`),
	`passWord` = VALUES(`passWord`),
	`realName` = VALUES(`realName`);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值