mysql插入数据不存在插入存在修改- ON DUPLICATE KEY UPDATE

需求描述:我需要在用户邮寄地址表中保存用户填写的邮寄地址,如果当前中奖纪录的邮寄地址纪录已经存在,那么就执行修改操作,如果当前中奖纪录的邮寄地址不存在就插入一条邮寄地址。

第一步:创建表

保存用户奖品邮寄地址表

中奖纪录唯一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。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值