mysql 存在該記錄則更新,不存在則插入記錄的sql
INSERT table (auto_id, auto_name) values (1, ‘yourname') ON DUPLICATE KEY UPDATE auto_name='yourname'
ON DUPLICATE KEY UPDATE的使用
如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后會(huì)導(dǎo)致在一個(gè)UNIQUE索引或PRIMARY KEY中出現(xiàn)重復(fù)值,則執(zhí)行舊行UPDATE。例如,如果列a被定義為UNIQUE,并且包含值1,則以下兩個(gè)語(yǔ)句具有相同的效果:
mysql> INSERT INTO table (a,b,c) VALUES (1,2,3)
-> ON DUPLICATE KEY UPDATE c=c+1;
mysql> UPDATE table SET c=c+1 WHERE a=1;
如果行作為新記錄被插入,則受影響行的值為1;如果原有的記錄被更新,則受影響行的值為2。
注釋:如果列b也是唯一列,則INSERT與此UPDATE語(yǔ)句相當(dāng):
mysql> UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;
如果a=1 OR b=2與多個(gè)行向匹配,則只有一個(gè)行被更新。通常,您應(yīng)該盡量避免對(duì)帶有多個(gè)唯一關(guān)鍵字的表使用ON DUPLICATE KEY子句。
您可以在UPDATE子句中使用VALUES(col_name)函數(shù)從INSERT...UPDATE語(yǔ)句的INSERT部分引用列值。換句話說(shuō),如果沒(méi)有發(fā)生重復(fù)關(guān)鍵字沖突,則UPDATE子句中的VALUES(col_name)可以引用被插入的col_name的值。本函數(shù)特別適用于多行插入。VALUES()函數(shù)只在INSERT...UPDATE語(yǔ)句中有意義,其它時(shí)候會(huì)返回NULL。
示例:
mysql> INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
-> ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
本語(yǔ)句與以下兩個(gè)語(yǔ)句作用相同:
mysql> INSERT INTO table (a,b,c) VALUES (1,2,3)
-> ON DUPLICATE KEY UPDATE c=3;
mysql> INSERT INTO table (a,b,c) VALUES (4,5,6)
-> ON DUPLICATE KEY UPDATE c=9;
當(dāng)您使用ON DUPLICATE KEY UPDATE時(shí),DELAYED選項(xiàng)被忽略。
相關(guān)文章
Mysql啟動(dòng)中 InnoDB: Error: log file ./ib_logfile0 is of differe
對(duì)于使用了默認(rèn) my.cnf(一般教程都會(huì)教你使用support-files/my-medium.cnf)的Mysql服務(wù)來(lái)說(shuō)如果中間使用了innodb的話,innodb默認(rèn)的log file大小是56M2011-05-05win2003 安裝2個(gè)mysql實(shí)例做主從同步服務(wù)配置
注意的就是路徑的正確書(shū)寫(xiě)。然后在my.ini的配置中,server_id必須保持唯一性。port避免使用3306,服務(wù)名稱和mysql5.1不一樣即可。2011-05-05關(guān)于mysql的時(shí)區(qū)問(wèn)題
這篇文章主要介紹了關(guān)于mysql的時(shí)區(qū)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家,2023-11-11庫(kù)名表名大小寫(xiě)問(wèn)題與sqlserver兼容的啟動(dòng)配置方法
庫(kù)名表名大小寫(xiě)問(wèn)題與sqlserver兼容的啟動(dòng)配置方法,需要的朋友可以參考下。2010-12-12對(duì)比分析MySQL語(yǔ)句中的IN 和Exists
mysql中in 是把外表和內(nèi)表作hash 連接,而exists是對(duì)外表作loop循環(huán),每次loop循環(huán)再對(duì)內(nèi)表進(jìn)行查詢。一直以來(lái)認(rèn)為exists比in效率高的說(shuō)法是不準(zhǔn)確的。2018-06-06mysql實(shí)現(xiàn)設(shè)置定時(shí)任務(wù)的方法分析
這篇文章主要介紹了mysql實(shí)現(xiàn)設(shè)置定時(shí)任務(wù)的方法,結(jié)合實(shí)例形式分析了mysql定時(shí)任務(wù)相關(guān)的事件計(jì)劃設(shè)置與存儲(chǔ)過(guò)程使用等操作技巧,需要的朋友可以參考下2019-10-10mysql實(shí)現(xiàn)定時(shí)備份的詳細(xì)圖文教程
這篇文章主要給大家介紹了關(guān)于mysql實(shí)現(xiàn)定時(shí)備份的詳細(xì)圖文教程,我們都知道數(shù)據(jù)是無(wú)價(jià),如果不對(duì)數(shù)據(jù)進(jìn)行備份,相當(dāng)是讓數(shù)據(jù)在裸跑,一旦服務(wù)器出問(wèn)題,只有哭的份了,需要的朋友可以參考下2023-07-07關(guān)于Mysql如何設(shè)計(jì)高性能的數(shù)據(jù)庫(kù)
這篇文章主要介紹了關(guān)于Mysql如何設(shè)計(jì)高性能的數(shù)據(jù)庫(kù),mysql支持的數(shù)據(jù)類(lèi)型非常多,選擇正確的數(shù)據(jù)類(lèi)型對(duì)于獲得高性能至關(guān)重要,本文就來(lái)詳細(xì)說(shuō)明如何設(shè)計(jì)出高性能的數(shù)據(jù)庫(kù),需要的朋友可以參考下2023-07-07