Mysql如何實現(xiàn)不存在則插入,存在則更新
數(shù)據(jù)準備

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索引列等情況),相當于執(zhí)行了insert部分,普通插入,受影響的行:1。
insert into test_table(id,username) VALUES(1,'fukaiit') ON DUPLICATE KEY UPDATE username='fukaiit'
執(zhí)行如上sql,該id已存在,相當于執(zhí)行了update部分,受影響的行:2。
執(zhí)行結果如下,注意只是更新username,是保留了email的。

REPLACE INTO … VALUES…
REPLACE INTO test_table(id,username) VALUES(5,'fukaiit');
執(zhí)行如上sql,該id不存在,相當于執(zhí)行了insert,普通插入,受影響的行:1。
REPLACE INTO test_table(id,username) VALUES(1,'fukaiit');
執(zhí)行如上sql,該id已存在,相當于執(zhí)行了刪除再插入的操作,受影響的行:2。
執(zhí)行結果如下,注意刪除后再插入是沒有email值的,所以此時email為null,注意與ON DUPLICATE KEY UPDATE的區(qū)別。

無論是insert on duplicate key update還是replace into,在插入時MySQL返回的影響行數(shù)就是插入的記錄數(shù),但是在更新時返回的影響行數(shù)是更新行數(shù)*2。
INSERT IGNORE INTO … VALUES…
INSERT IGNORE INTO test_table(id,username)? values(6,'fukaiit');
執(zhí)行如上sql,該id不存在,相當于執(zhí)行了insert,普通插入,受影響的行:1。
INSERT IGNORE INTO test_table(id,username)? values(1,'fukaiit_new');
執(zhí)行如上sql,該id已存在,忽略了該插入操作,數(shù)據(jù)沒有變化,受影響的行: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子句返回結果集為空,NOT EXISTS成立,相當于執(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子句返回結果集不為空,NOT EXISTS不成立,則未執(zhí)行插入操作,數(shù)據(jù)沒有變化,受影響的行:0。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
mysql 中 replace into 與 insert into on duplicate key update 的
這篇文章主要介紹了mysql 中 replace into 與 insert into on duplicate key update 的用法和不同點,結合實例形式分析了replace into 與 insert into on duplicate key update的功能、基本用法與操作注意事項,需要的朋友可以參考下2020-02-02
FROM_UNIXTIME 格式化MYSQL時間戳函數(shù)
對MYSQL沒有進行過深入的研究,基礎知識匱乏,一遇到問題只能手冊,看來要把MYSQL的學習安排進時間表了。2011-04-04
linux下mysql數(shù)據(jù)庫單向同步配置方法分享
mysql數(shù)據(jù)庫單向同步又叫做主從復制,是通過二進制日志文件完成的,注意:mysql 數(shù)據(jù)庫的版本,兩個數(shù)據(jù)庫版本要相同2012-06-06

