阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

教你Mysql如何实现不存在则插入,存在则更新

48次阅读
没有评论

共计 1503 个字符,预计需要花费 4 分钟才能阅读完成。

导读 这篇文章主要介绍了 Mysql 如何实现不存在则插入,存在则更新,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
数据准备

教你 Mysql 如何实现不存在则插入, 存在则更新

ON DUPLICATE KEY UPDATE
insert into test_table(id,username)
VALUES(4,'fukaiit')
ON DUPLICATE KEY UPDATE username='fukaiit'

执行如上 sql,该 id 不存在 (此处 id 不存在,指的是 id 为 X 的记录不存在,包括主键、unique 索引列等情况),相当于执行了 insert 部分,普通插入,受影响的行:1。

insert into test_table(id,username)
VALUES(1,'fukaiit')

ON DUPLICATE KEY UPDATE username=’fukaiit’
执行如上 sql,该 id 已存在,相当于执行了 update 部分,受影响的行:2。

执行结果如下,注意只是更新 username,是保留了 email 的。

教你 Mysql 如何实现不存在则插入, 存在则更新

REPLACE INTO … VALUES…
REPLACE INTO test_table(id,username)
VALUES(5,'fukaiit');

执行如上 sql,该 id 不存在,相当于执行了 insert,普通插入,受影响的行:1。

REPLACE INTO test_table(id,username)
VALUES(1,'fukaiit');

执行如上 sql,该 id 已存在,相当于执行了删除再插入的操作,受影响的行:2。

执行结果如下,注意删除后再插入是没有 email 值的,所以此时 email 为 null,注意与 ON DUPLICATE KEY UPDATE 的区别。

教你 Mysql 如何实现不存在则插入, 存在则更新

无论是 insert on duplicate key update 还是 replace into,在插入时 MySQL 返回的影响行数就是插入的记录数,但是在更新时返回的影响行数是更新行数 *2。

INSERT IGNORE INTO … VALUES…
INSERT IGNORE INTO test_table(id,username) 
values(6,'fukaiit');

执行如上 sql,该 id 不存在,相当于执行了 insert,普通插入,受影响的行:1。

INSERT IGNORE INTO test_table(id,username) 
values(1,'fukaiit_new');

执行如上 sql,该 id 已存在,忽略了该插入操作,数据没有变化,受影响的行:0。

使用 DUAL 虚表和 NOT EXISTS

该方法与 INSERT IGNORE INTO … VALUES… 方法的效果相同。

INSERT INTO test_table(id,username)
SELECT 7,'fukaiit' from DUAL 
where NOT EXISTS (select * from test_table where id=7);

执行如上 sql,该 id 不存在,select 子句返回结果集为空,NOT EXISTS 成立,相当于执行了 insert,普通插入,受影响的行:1。

INSERT INTO test_table(id,username)
SELECT 2,'fukaiit' from DUAL 
where NOT EXISTS (select * from test_table where id=2);

执行如上 sql,该 id 已存在,select 子句返回结果集不为空,NOT EXISTS 不成立,则未执行插入操作,数据没有变化,受影响的行:0。

以上为个人经验,希望能给大家一个参考

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计1503字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中