[精讚] [會員登入]
10929

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 安裝完畢要做的事 Mysql 安裝完畢後,該處理的流程

[phpmyadmin] 登錄超時 (1440 秒未操作),請重新登錄 phpmyadmin登錄超時 (1440 秒未操作),請重新登錄的問題,該如何解決?

[Mysql] 使用union合併兩個表 mysql合併兩個表的方法,使用union

[Mysql/MariaDB] 使用 LOCATE, POSITION, INSTR來取代 like [Mysql/MariaDB中使用LOCATE, POSITION, INSTR來取代 like的方法

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

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

隨機好文

為什麼要買長達二十年的保單? 為什麼要買長達二十年的保單?找一個可以說服我買二十年保單的理由。

看懂DSUB DVI HDMI USB等各式影音接頭 看懂DSUB DVI HDMI等各式影音接頭

TFTP Server 安裝及使用 讓設備的網路設定檔或是韌體經由TFTP拷備出來,操作的方法

海棉寶寶超泡杯演奏的sweet victory 章魚哥和海棉寶寶在超泡杯的演奏歌曲

[Wildfly10] 發佈war檔 deploy war file onto wildfly10