Mysql如何實(shí)現(xiàn)不存在則插入,存在則更新
數(shù)據(jù)準(zhǔn)備
ON DUPLICATE KEY UPDATE
insert into test_table(id,username) VALUES(4,'fukaiit') ON DUPLICATE KEY UPDATE username='fukaiit'
執(zhí)行如上sql,該id不存在(此處id不存在,指的是id為X的記錄不存在,包括主鍵、unique索引列等情況),相當(dāng)于執(zhí)行了insert部分,普通插入,受影響的行:1。
insert into test_table(id,username) VALUES(1,'fukaiit') ON DUPLICATE KEY UPDATE username='fukaiit'
執(zhí)行如上sql,該id已存在,相當(dāng)于執(zhí)行了update部分,受影響的行:2。
執(zhí)行結(jié)果如下,注意只是更新username,是保留了email的。
REPLACE INTO … VALUES…
REPLACE INTO test_table(id,username) VALUES(5,'fukaiit');
執(zhí)行如上sql,該id不存在,相當(dāng)于執(zhí)行了insert,普通插入,受影響的行:1。
REPLACE INTO test_table(id,username) VALUES(1,'fukaiit');
執(zhí)行如上sql,該id已存在,相當(dāng)于執(zhí)行了刪除再插入的操作,受影響的行:2。
執(zhí)行結(jié)果如下,注意刪除后再插入是沒(méi)有email值的,所以此時(shí)email為null,注意與ON DUPLICATE KEY UPDATE的區(qū)別。
無(wú)論是insert on duplicate key update還是replace into,在插入時(shí)MySQL返回的影響行數(shù)就是插入的記錄數(shù),但是在更新時(shí)返回的影響行數(shù)是更新行數(shù)*2。
INSERT IGNORE INTO … VALUES…
INSERT IGNORE INTO test_table(id,username)? values(6,'fukaiit');
執(zhí)行如上sql,該id不存在,相當(dāng)于執(zhí)行了insert,普通插入,受影響的行:1。
INSERT IGNORE INTO test_table(id,username)? values(1,'fukaiit_new');
執(zhí)行如上sql,該id已存在,忽略了該插入操作,數(shù)據(jù)沒(méi)有變化,受影響的行: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);
執(zhí)行如上sql,該id不存在,select子句返回結(jié)果集為空,NOT EXISTS成立,相當(dāng)于執(zhí)行了insert,普通插入,受影響的行:1。
INSERT INTO test_table(id,username) SELECT 2,'fukaiit' from DUAL? where NOT EXISTS (select * from test_table where id=2);
執(zhí)行如上sql,該id已存在,select子句返回結(jié)果集不為空,NOT EXISTS不成立,則未執(zhí)行插入操作,數(shù)據(jù)沒(méi)有變化,受影響的行:0。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
mysql 中 replace into 與 insert into on duplicate key update 的
這篇文章主要介紹了mysql 中 replace into 與 insert into on duplicate key update 的用法和不同點(diǎn),結(jié)合實(shí)例形式分析了replace into 與 insert into on duplicate key update的功能、基本用法與操作注意事項(xiàng),需要的朋友可以參考下2020-02-02FROM_UNIXTIME 格式化MYSQL時(shí)間戳函數(shù)
對(duì)MYSQL沒(méi)有進(jìn)行過(guò)深入的研究,基礎(chǔ)知識(shí)匱乏,一遇到問(wèn)題只能手冊(cè),看來(lái)要把MYSQL的學(xué)習(xí)安排進(jìn)時(shí)間表了。2011-04-04SQL SERVER 2005 最小安裝經(jīng)驗(yàn)
很久以前有個(gè)疑問(wèn) 安裝SQL SERVER 2005后為什么會(huì)把VS2005給裝上了,當(dāng)時(shí)很郁悶,試想是不是在哪個(gè)環(huán)節(jié)把VS2005組件勾上的?2011-02-02MySQL replace into 語(yǔ)句淺析(二)
這篇文章主要介紹了MySQL replace into 語(yǔ)句淺析(二),本文著重給出了幾個(gè)特殊案例分析,需要的朋友可以參考下2015-05-05linux下mysql數(shù)據(jù)庫(kù)單向同步配置方法分享
mysql數(shù)據(jù)庫(kù)單向同步又叫做主從復(fù)制,是通過(guò)二進(jìn)制日志文件完成的,注意:mysql 數(shù)據(jù)庫(kù)的版本,兩個(gè)數(shù)據(jù)庫(kù)版本要相同2012-06-06MySQL安裝后默認(rèn)自帶數(shù)據(jù)庫(kù)的作用詳解
這篇文章主要介紹了MySQL安裝后默認(rèn)自帶數(shù)據(jù)庫(kù)的作用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04