博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql插入数据避免重复(Replace,IGNORE,on duplicate key update)
阅读量:4043 次
发布时间:2019-05-24

本文共 1307 字,大约阅读时间需要 4 分钟。

平时业务中经常会遇到,插入记录是如果记录不存在则插入记录,如果存在则执行更新或者忽略,

 

CREATE TABLE `d` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(64) DEFAULT NULL,  `updatetime` timestamp NULL DEFAULT NULL,  `updateby` varchar(64) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB  DEFAULT CHARSET=utf8;INSERT INTO d ( name, updatetime, updateby) VALUES ( '2', null, null);

1使用Replace

使用 replace into 插入数据时,如果表中存在记录(主键或者唯一索引冲突时)则先执行删除,在插入数据,如果replace语句的字段不全的话,有些原有的字段的值会被自动填充为默认值,

REPLACE语句会返回一个数,来指示受影响的行的数目。该数是被删除和被插入的行数的和(如下语句,返回结果是3,其中一行存在,一行不存在)

replace into d(id,name) values (1,2),(256,256);

2使用IGNORE

使用 ignore 插入数据时,如果表中存在记录(主键或者唯一索引冲突时) 则忽略执行,不存在则插入记录,

ignore 返回结果是插入的的记录数(不包含已经存在记录),如下语句返回结果1,

insert  IGNORE into d(id,name) values (1,2),(256,256),(257,257);

3使用 on duplicate key update

使用on duplicate key update插入数据是,如果表中存在记录(主键或者唯一索引冲突时) 则执行后面的update语句,不存在则插入记录

如果行作为新记录被插入,则受影响行的值为1;如果原有的记录被更新,则受影响行的值为2。

insert into d(id,name) values (1,2),(256,256),(257,257),(258,258) on duplicate key update updateby='test';

 

您可以在UPDATE子句中使用VALUES(col_name)函数从INSERT…UPDATE语句的INSERT部分引用列值。换句话说,如果没有发生重复关键字冲突,则UPDATE子句中的VALUES(col_name)可以引用被插入的col_name的值。本函数特别适用于多行插入。VALUES()函数只在INSERT…UPDATE语句中有意义,其它时候会返回NULL。

insert into d(id,name) values (1,2),(256,256),(257,257),(258,259) on duplicate key update updateby='test',name=VALUES(name);

 

转载地址:http://hqmdi.baihongyu.com/

你可能感兴趣的文章
js弹窗插件
查看>>
自定义 select 下拉框 多选插件
查看>>
js判断数组内是否有重复值
查看>>
js获取url链接携带的参数值
查看>>
gdb 调试core dump
查看>>
gdb debug tips
查看>>
arm linux 生成火焰图
查看>>
linux和windows内存布局验证
查看>>
linux insmod error -1 required key invalid
查看>>
linux kconfig配置
查看>>
linux不同模块completion通信
查看>>
linux printf获得时间戳
查看>>
C语言位扩展
查看>>
linux dump_backtrace
查看>>
linux irqdebug
查看>>
git 常用命令
查看>>
linux位操作API
查看>>
uboot.lds文件分析
查看>>
uboot start.s文件分析
查看>>
没有路由器的情况下,开发板,虚拟机Ubuntu,win10主机,三者也可以ping通
查看>>