MySQL
来源:互联网 发布:维普中文期刊数据库 编辑:程序博客网 时间:2024/06/05 14:14
在插入数据的时候,有时候会遇到主键(唯一键)冲突的情况。下面讲述两种解决办法:
① 更新原数据
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数据冲突,插入失败!)。
不建议使用,麻烦哎!
② 替换数据
语法格式如下:
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。
阅读全文
0 0
- Mysql
- MySql
- MYSQL
- MySQL
- mysql
- mysql
- mysql
- mysql
- Mysql
- Mysql
- mysql
- MySQL
- mysql
- Mysql
- mysql
- mysql
- mysql
- mySQL
- latex中如何将表格的Table1改为表1
- 《舞步学院》教你聊天的新手课,不要再做一个沉默的暗恋者!
- Ubuntu16.04首次安装无法连网和将桌面左侧任务栏移到屏幕底部
- 生产车间管理使用ERP系统提高企业管理水平
- 比特币
- MySQL
- 开始学习Python!请多指教!
- mac下用ffmpeg 收录HLS流
- css轻松第一课
- 43. Multiply Strings
- POJ 3436 网络流+拆分
- 设计模式-单例模式懒汉和饿汉的比较
- AMBA学习
- cannot change DocValues type from SORTED_SET to NUMERIC for field "readTimes"