[精讚] [會員登入]
10602

Mysql INSERT ... ON DUPLICATE KEY UPDATE 寫法,MYSQL如果存在的修改,不存在就新增的寫法

Mysql有則修改,無則新增的sql寫法

分享此文連結 //n.sfs.tw/10334

分享連結 Mysql INSERT ... ON DUPLICATE KEY UPDATE 寫法,MYSQL如果存在的修改,不存在就新增的寫法@新精讚
(文章歡迎轉載,務必尊重版權註明連結來源)
2024-08-23 21:29:53 最後編修
2016-11-30 23:34:26 By 張○○
 

我們在處理資料時都知道,當資料不存在時,會新增 INSERT INTO XXX;而在資料已經存在時,會修改 UPDATE XXXX。

事實上,常常我們會不清楚到底資料是否已經存在,所以總是在操作前先SELECT一下是否已存在該筆資料。

這雖然沒問題,但寫程式時會很麻煩。

還好MYSQL提供一個 INSERT ... ON DUPLICATE KEY UPDATE 的寫法,可以一行就解決這樣的難題。

必要條件

  1. 資料表中必須有主鍵或唯一鍵 (PRIMARY or UNIQUE key)

  2. INSERT時須帶入1. 欄位的資料

範例

這裡我引用一個組合主鍵的範例給各位參考。

CREATE TABLE IF NOT EXISTS `gamePlayer` (
  `pNode` char(2) collate utf8_bin NOT NULL,
  `gsn` int(11) NOT NULL,
  `out` smallint(6) NOT NULL,
  `changeColor` tinyint(4) NOT NULL,
  PRIMARY KEY  (`pNode`,`gsn`),
  KEY `gsn` (`gsn`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

SQL語法範例

INSERT INTO `gamePlayer` (`pNode`, `gsn`,`out`, `changecolor`) VALUES ('K',4, 100, 1) 
ON DUPLICATE KEY UPDATE `out`=100, `changecolor`=1

上面 pNode 和 gsn 兩個欄位是組合主鍵,所以在insert時一定要帶值進去,如上例中的 'K', 4。(如果只有單一主鍵就更簡單了)

Mysql會自動判斷該主鍵是否重覆,如果重覆就會叫用後面的 UPDATE。

UPDATE直接寫入要修改的其他欄位值即可,主鍵是不能修改的,不需要也不可以加上 WHERE..


原文 2012-05-04 22:40:21

END

你可能感興趣的文章

[Mysql/Mariadb] 全文檢索 fulltext index 關於 MySQL 的全文檢索

[Mysql] 建立叢集式資料庫2/4 -- DB2、DB3設定 使用galera建立Mysql的叢集式資料庫 ,繼續建立第2,第3台DBs

[Mysql/Mariadb] 檢查、修復及優化資料庫 mysql/mariadb 檢查、修復及優化資料庫

group by的語法在mysql升級後後就不正常了,怎麼回事? ONLY_FULL_GROUP_BY這個變數是怎樣,讓我原本可以用的語法失效了?

[Mysql] Mysqldump 的預設編碼 --default-character-set 有時Mysqldump 也得要指定編碼才不會造成匯出的亂碼

[MySQL] FIND_IN_SET函數,把多筆條件判斷弄成字串 SQL 我們如果要查找某個欄位是否為某個值的時候,如果要判斷的條件很多,可以用這個函數

我有話要說

>>

限制:留言最高字數1000字。 限制:未登入訪客,每則留言間隔需超過10分鐘,每日最多5則留言。

訪客留言

[無留言]

隨機好文

UTF-8 BOM (Byte Order Mark) 的問題 在 Michael Kaplan 那看到 Every character has a story #4: U+feff

[Win7] 燒錄 iso 檔 在Windows7 中內建燒錄程式,可以直接把檔案拉到光碟機裡,再執行燒錄。

UTF-8的網頁但IE8一片空白 UTF8編碼的網頁在Firefox 正常顯示、但IE8 就是空白,IE8編碼設定是「自動偵測」可是自動偵測到的是 big5...

世紀帝國征服者新版本--被遺忘的帝國 世紀帝國征服者新版本--被遺忘的帝國 世紀二代的征服者是精典遊戲中的精典,aofe更好玩...

[CodeIgniter 3] 資料庫的使用方法整理1/2 --Select的使用 [CodeIgniter 3] 資料庫的使用方法整理:Select的使用