本文共 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);
使用 replace into 插入数据时,如果表中存在记录(主键或者唯一索引冲突时)则先执行删除,在插入数据,如果replace语句的字段不全的话,有些原有的字段的值会被自动填充为默认值,
REPLACE语句会返回一个数,来指示受影响的行的数目。该数是被删除和被插入的行数的和(如下语句,返回结果是3,其中一行存在,一行不存在)
replace into d(id,name) values (1,2),(256,256);
使用 ignore 插入数据时,如果表中存在记录(主键或者唯一索引冲突时) 则忽略执行,不存在则插入记录,
ignore 返回结果是插入的的记录数(不包含已经存在记录),如下语句返回结果1,
insert IGNORE into d(id,name) values (1,2),(256,256),(257,257);
使用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/