MySQL中数据插入与主键冲突解决方案

在插入数据的时候,有时候会遇到主键(唯一键)冲突的情况。下面讲述两种解决办法。

【1】 更新原数据

insert into 表名[(字段列表:包含主键)] 
values(值列表) 
on duplicate key update 字段 = 新值。

示例如下 :

insert into p_user (id,name,age,sex) VALUES(1,'luco',13,'b1y') 
-- 如果主键(唯一键)冲突用到下面语句
on duplicate key update age = 199,name='luco',sex='b1y';

表中已经有了id(primary key)的记录数据,此时再插入id=1的数据,肯定提示冲突。这里就是当冲突时,将原先除了主键之外的字段进行更新(如果主键为ID, 同时name为unique,新插入的数据中name在表中已经存在,则提示name数据冲突,插入失败!)。

这里写图片描述

【2】 替换数据

语法格式如下:

Replace into 表名[(字段列表:包含主键)] values(值列表) 

示例如下:

replace  into p_user (id,name,age,sex) VALUES(1,'jane5',14,'b0oy') 

  • id为主键,name为unique,且表中无jane5。那么成功插入,影响行数2;

  • id为主键,name为unique,但表中存在一个jane5(与主键冲突的行记录不一致),那么成功插入同时删除了表中jane5的行记录,影响行数3。

  • id为主键,主键无冲突,且name无冲突,成功插入,影响行数1。

  • id 为主键,主键无冲突,但name有一个冲突,成功插入同时删除已有的name行记录,影响行数2。

  • id为主键,主键冲突。name冲突且与id冲突为同一行记录(例子:语句执行了两遍),影响行数2,成功替换。

总之,无论更新还是替换,都是先删除原数据,再重新插入(根据影响行数判断)。但是替换更便捷!需要注意的是除了主键外,表中是否还存在unique。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流烟默

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值