mysql insert 存在即不插入語法說明
insert 存在即不插入語法
介紹三種方式
第一種:replace into
replace into table(id, name) values(1, '張三') ; /*或者*/ replace into table(id, name) select 1, '張三' ;
replace into 跟 insert 功能類似。
不同點在于:replace into 首先嘗試插入數據到表中
1.如果發(fā)現表中已經有此行數據(根據主鍵或者唯一索引判斷)則先刪除此行數據,然后插入新的數據。
2.否則,直接插入新數據。
要注意的是:插入數據的表必須有主鍵或者是唯一索引!
否則的話,replace into 會直接插入數據,這將導致表中出現重復的數據。
第二種:DUAL臨時表
insert into table(id, name) select null, '張三' from DUAL where not exists (select id from table where name = '張三') ;
其中的 DUAL 是一個臨時表,不需要物理創(chuàng)建,直接用即可。
這種就不需要上述那種必須主鍵相同或者有唯一索引的字段。
第三種:根據主鍵判斷
insert into table(id, name) on duplicate key update name = '李四';
根據主鍵id進行判重。
效果區(qū)別
第一種:不存在即插入,存在即修改
第二種:不存在即插入,存在則不做處理
第三種:不存在不做處理,存在即執(zhí)行update
已有數據存在則不插入,否則則修改
經常遇到這樣的情景,向一個表里插入一條數據,如果已經存在就更新一下,用程序實現麻煩而且在并發(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;
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

