需求描述:我需要在用户邮寄地址表中保存用户填写的邮寄地址,如果当前中奖纪录的邮寄地址纪录已经存在,那么就执行修改操作,如果当前中奖纪录的邮寄地址不存在就插入一条邮寄地址。
第一步:创建表
保存用户奖品邮寄地址表
中奖纪录唯一id session_id 需要添加唯一索引 ON DUPLICATE KEY UPDATE 语法的关键就是需要判断以一个唯一值重复的时候就执行修改操作。
CREATE TABLE `lucky_address` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',
`msisdn` varchar(11) DEFAULT NULL COMMENT '中奖用户电话号码',
`username` varchar(100) DEFAULT NULL COMMENT '收货人姓名',
`contact` varchar(11) DEFAULT NULL COMMENT '收货人电话',
`identity_id` varchar(50) DEFAULT NULL COMMENT '身份证号',
`city` varchar(100) DEFAULT NULL COMMENT '城市',
`address` varchar(255) DEFAULT NULL COMMENT '详细地址',
`prize_id` varchar(100) DEFAULT NULL COMMENT '奖品id',
`activity_id` varchar(100) DEFAULT NULL COMMENT '活动id',
`createtime` datetime DEFAULT NULL COMMENT '插入时间',
`updatetime` datetime DEFAULT NULL COMMENT '修改时间',
`session_id` varchar(255) DEFAULT NULL COMMENT '中奖纪录唯一id',
PRIMARY KEY (`id`),
UNIQUE KEY `1111` (`session_id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4;
第二步 :写sql
INSERT INTO lucky_address SET `msisdn`='22',`username`='22',`contact`='22',`identity_id`='22',`city`='22',`address`='22',`prize_id`='22',`activity_id`='22',`session_id`='444',`createtime`=NOW()
ON DUPLICATE KEY UPDATE `msisdn`='333',`username`='333',`contact`='333',`identity_id`='333',`city`='333',`address`='333',`prize_id`='333',`activity_id`='333',`updatetime`= NOW();
第一次执行sql语句效果:
因为第一次执行的时候这个session_id的值数据库中不存在所有执行的是插入操作
第二次执行sql语句效果:
因为 当前session_id在数据库中已经存在,并且是唯一索引,索引不能插入数据,从而执行的是修改语句,所有第二次执行实际上是执行了两条sql。