[精讚] [會員登入]
10942

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] 清除及設定 MySQL 的死連接 mysql 伺服器若有太多的連接,無疑的會耗用非常多的資源,若資源耗盡會影響新的連線,勢必要做一些調整

[Mysql/Mariadb] 密碼設定強度修改 新的mysql對於密碼預設也把原來的規則改得更嚴格,此篇教你修改密碼的設定政策

[Mysql/Mariadb] Left Join 和 Right Join 合併表單 SQL語法中的 Left Join 和 Right Join 很常用,但是我常會忘記,所以寫下來備忘。

[Mysql] Trigger 觸發使用方法 trigger 在資料庫的使用上,具有極大的方便性,該如何使用?

[Mysql/MariaDB] 表格的引擎 (engine):查看及修改 MySQL表格引擎預設為 MyISAM,但在4.0以上的mysql 其實支援不只一種引擎,各有優缺點,這篇介紹引擎的操作。

[MYSQL] 設定字串欄位的預設值 新增表格的時候,字串欄位給予預設空值;數字欄位給預設數值;日期欄位給空值。

隨機好文

SELinux 常用指令和檔案 在Redhat系列中,Centos5以後加入了selinux,他並沒有這麼可怕,不必每次看到Selinux ,就想把他

[Freebsd] 定時測試 ADSL 是否斷線並重連 中華電信 ADSL 雖有固定 ip,可是他卻會不定時「斷線」, 使用以下的 方法可以定時測試是否斷線,以及重新撥接。

Linux shell 的date表示法 linux下SHELL中的date表示法

[JAVA] JWS, JWT, JWE, JOSE是什麼? [JAVA] JWS, JWT, JWE, JOSE是什麼?非常的複雜,儘量來搞清楚..

精讚的版面變化 ▓此文僅作為舊文的記錄▓ 這篇文章為了紀念改版完成而撰寫。 原本的部落格是民國97年的作品,那時還是用舊有的技術來寫,很