[精讚] [會員登入]
10920

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] 查看使用狀態,抓出可疑慢查詢SQL 當Mysql 的負載loading飆高時,除了重新啟動外,如果想對症下藥,那該怎麼處理?

[MariaDB] Centos 7安裝mariadb + apache + php + phpmyadmin Centos 7安裝mariadb+apache+php+phpmyadmin

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

[Mysql] 建立叢集式資料庫3/4 -- DB1設置及DB PROXY 使用galera建立Mysql的叢集式資料庫 ,繼續修正第1DB及運作PROXY

[Mysql/Mariadb] 忘記root密碼 常常會忘記root 密碼,簡單的幾步驟回復

[Mysql] 修改資料庫預設校對或編碼 修改資料庫預設校對或編碼的方法

隨機好文

[jQuery] textarea 的取值和給值 HTML 的 TEXTAREA 標籤若要用 jquery 取值,不能使用 .text() 或 .html() ,使用 .

問問題 問問題其實內涵很深,我悟了很久才懂。 有人問題的目的並不一定是想要得到答案,有時只是純粹想問問題..

[AS3] FLASH 引入外部as檔 FLASH AS3中,若要引用另外撰寫的 class(*.as) 檔案,該如何處理?

[AS3] 變數型態 基本類型宣告 as3 有下列幾種基本類型:string, int, number, object, boolean, n

Javascript/Jquery 建立、讀取、刪除cookie值 Javascript/Jquery 建立、讀取、刪除cookie值