我們在處理資料時都知道,當資料不存在時,會新增 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