mysql 存在該記錄則更新,不存在則插入記錄的sql
更新時間:2010年04月14日 13:43:37 作者:
非常不錯的功能,主要用于更新特定的記錄,如果存在這條記錄則更新一下,如果不存在則插入記錄。應(yīng)用于配置文件等。
復(fù)制代碼 代碼如下:
INSERT table (auto_id, auto_name) values (1, ‘yourname') ON DUPLICATE KEY UPDATE auto_name='yourname'
ON DUPLICATE KEY UPDATE的使用
如果您指定了ON DUPLICATE KEY UPDATE,并且插入行后會導(dǎo)致在一個UNIQUE索引或PRIMARY KEY中出現(xiàn)重復(fù)值,則執(zhí)行舊行UPDATE。例如,如果列a被定義為UNIQUE,并且包含值1,則以下兩個語句具有相同的效果:
復(fù)制代碼 代碼如下:
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語句相當(dāng):
復(fù)制代碼 代碼如下:
mysql> UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;
如果a=1 OR b=2與多個行向匹配,則只有一個行被更新。通常,您應(yīng)該盡量避免對帶有多個唯一關(guān)鍵字的表使用ON DUPLICATE KEY子句。
您可以在UPDATE子句中使用VALUES(col_name)函數(shù)從INSERT...UPDATE語句的INSERT部分引用列值。換句話說,如果沒有發(fā)生重復(fù)關(guān)鍵字沖突,則UPDATE子句中的VALUES(col_name)可以引用被插入的col_name的值。本函數(shù)特別適用于多行插入。VALUES()函數(shù)只在INSERT...UPDATE語句中有意義,其它時候會返回NULL。
示例:
復(fù)制代碼 代碼如下:
mysql> INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
-> ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
本語句與以下兩個語句作用相同:
復(fù)制代碼 代碼如下:
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時,DELAYED選項被忽略。
相關(guān)文章
Mysql啟動中 InnoDB: Error: log file ./ib_logfile0 is of differe
對于使用了默認 my.cnf(一般教程都會教你使用support-files/my-medium.cnf)的Mysql服務(wù)來說如果中間使用了innodb的話,innodb默認的log file大小是56M2011-05-05win2003 安裝2個mysql實例做主從同步服務(wù)配置
注意的就是路徑的正確書寫。然后在my.ini的配置中,server_id必須保持唯一性。port避免使用3306,服務(wù)名稱和mysql5.1不一樣即可。2011-05-05mysql實現(xiàn)設(shè)置定時任務(wù)的方法分析
這篇文章主要介紹了mysql實現(xiàn)設(shè)置定時任務(wù)的方法,結(jié)合實例形式分析了mysql定時任務(wù)相關(guān)的事件計劃設(shè)置與存儲過程使用等操作技巧,需要的朋友可以參考下2019-10-10關(guān)于Mysql如何設(shè)計高性能的數(shù)據(jù)庫
這篇文章主要介紹了關(guān)于Mysql如何設(shè)計高性能的數(shù)據(jù)庫,mysql支持的數(shù)據(jù)類型非常多,選擇正確的數(shù)據(jù)類型對于獲得高性能至關(guān)重要,本文就來詳細說明如何設(shè)計出高性能的數(shù)據(jù)庫,需要的朋友可以參考下2023-07-07