mysql insert 存在即不插入語法說明
insert 存在即不插入語法
介紹三種方式
第一種:replace into
replace into table(id, name) values(1, '張三') ; /*或者*/ replace into table(id, name) select 1, '張三' ;
replace into 跟 insert 功能類似。
不同點在于:replace into 首先嘗試插入數(shù)據(jù)到表中
1.如果發(fā)現(xiàn)表中已經(jīng)有此行數(shù)據(jù)(根據(jù)主鍵或者唯一索引判斷)則先刪除此行數(shù)據(jù),然后插入新的數(shù)據(jù)。
2.否則,直接插入新數(shù)據(jù)。
要注意的是:插入數(shù)據(jù)的表必須有主鍵或者是唯一索引!
否則的話,replace into 會直接插入數(shù)據(jù),這將導(dǎo)致表中出現(xiàn)重復(fù)的數(shù)據(jù)。
第二種:DUAL臨時表
insert into table(id, name) select null, '張三' from DUAL where not exists (select id from table where name = '張三') ;
其中的 DUAL 是一個臨時表,不需要物理創(chuàng)建,直接用即可。
這種就不需要上述那種必須主鍵相同或者有唯一索引的字段。
第三種:根據(jù)主鍵判斷
insert into table(id, name) on duplicate key update name = '李四';
根據(jù)主鍵id進行判重。
效果區(qū)別
第一種:不存在即插入,存在即修改
第二種:不存在即插入,存在則不做處理
第三種:不存在不做處理,存在即執(zhí)行update
已有數(shù)據(jù)存在則不插入,否則則修改
經(jīng)常遇到這樣的情景,向一個表里插入一條數(shù)據(jù),如果已經(jīng)存在就更新一下,用程序?qū)崿F(xiàn)麻煩而且在并發(fā)的時候可能會有問題,這時用mysql的DUPLICATE KEY 很方便
用法
INSERT INTO agent_user (group_id,group_type,user_name, user_mobile,created_time,updated_time) SELECT 9503,8,a.user_name,a.user_mobile,1642397508000,1642397508000 from agent_user_heimingdan a on DUPLICATE KEY UPDATE user_mobile = a.user_mobile;
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
windows server2014 安裝 Mysql Applying Security出錯的完美解決方法
這篇文章給大家介紹了windows server2014 安裝 Mysql Applying Security出錯的完美解決方法,造成這種問題的主要原因是因為安裝一遍之后沒有卸載干凈,要解決這個問題需要注意以下幾點,具體解決方法,大家參考下本文2017-07-07MySQL數(shù)據(jù)庫刪除數(shù)據(jù)自增ID不連續(xù)的實現(xiàn)示例
本文介紹了MySQL數(shù)據(jù)庫刪除數(shù)據(jù)后自增ID不連續(xù)的問題,文中通過2種方法解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11MySQL模糊查詢用法大全(正則、通配符、內(nèi)置函數(shù))
這篇文章主要介紹了MySQL模糊查詢用法大全(正則、通配符、內(nèi)置函數(shù)),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12