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ù),這將導致表中出現(xiàn)重復的數(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)文章
MySQL慢查詢?nèi)罩?Slow Query Log)的實現(xiàn)
慢查詢?nèi)罩居脕碛涗浽?nbsp;MySQL 中執(zhí)行時間超過指定時間的查詢語句,本文就來介紹一下MySQL慢查詢?nèi)罩?nbsp;的使用,感興趣的可以了解一下2024-08-08
MySQL數(shù)據(jù),查詢QPS,TPS數(shù)據(jù)方式
文章詳細介紹了查詢MySQL數(shù)據(jù)庫QPS和TPS的方法和工具,包括直接通過命令行、PerformanceSchema、mysqladmin、Prometheus、自動化腳本等,同時,還提供了優(yōu)化建議,如索引優(yōu)化、SQL調(diào)優(yōu)、事務控制和配置調(diào)優(yōu)2025-02-02
數(shù)據(jù)庫中的SELECT語句邏輯執(zhí)行順序分析
這篇文章主要介紹了數(shù)據(jù)庫中的SELECT語句邏輯執(zhí)行順序分析,并列出了一些例子,需要的朋友可以參考下2014-07-07

