Sql 语句的对比 -- REPLACE INTO 、 INSERT ON DUPLICATE KEY UPDATE 、 INSERT IGNORE INTO

 

Sql 语句的对比

总结一下 REPLACE INTO 、 INSERT ON DUPLICATE KEY UPDATE 、 INSERT IGNORE INTO 这几种方式的区别。

INSERT IGNORE INTO

INSERT IGNORE INTO表示,如果中已经存在相同的记录,则忽略当前新数据eg:

连续执行两次以下语句(id为主键):

insert into t(id, update_time) values(1, now());
则会报错:`ERROR 1062 (23000): Duplicate entry '1' for key 1` 

如果加上 ignore 则不会报错:

insert ignore into t(id, update_time) values(1, now());

使用了ignore关键字,但是记录不会被覆盖,数据仍是第一次插入的结果。

replace into

replace into 跟 insert 功能类似,不同点在于:replace into 首先尝试插入数据到表中, 1. 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。

要注意的是:插入数据的表必须有主键或者是唯一索引!否则的话,replace into 会直接插入数据,这将导致表中出现重复的数据。eg:

replace into t(id, update_time) values(1, now());

 INSERT ON DUPLICATE KEY UPDATE


使用了ON DUPLICATE KEY UPDATE,如果插入会导致UNIQUE索引或PRIMARY KEY中出现重复值,则改为对其执行UPDATE方法。

如果再插入时唯一索引 a 重复,以下两句话等效:

INSERT INTO t1 (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1; 

UPDATE t1 SET c=c+1 WHERE a=1;

如果 b 也是唯一索引,那么相当于以下SQL:

UPDATE t1 SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;

注意:后面增加了 LIMIT ,只会即使有多个唯一索引重复,耽误插入, ON DUPLICATE KEY UPDATE 只会更新一个。所以应该避免对带有多个唯一关键字的表使用ON DUPLICATE KEY子句

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值