MySQL – 依條件更新或新增資料(UPDATE or INSERT WHERE / ON DUPLICATE KEY)

若您有多個 MySQL 資料表想要更新或新增相同鍵值的資料,我們可以用 ON DUPLICATE KEY 的方式來處理。

如果換個說法,就是可以讓他自己判斷是否已經存在這個資料,存在時就更新、不存在就寫入,這個非常方便!

我們以資料表範例圖來實作(這是其中一個資料表的範例)

資料表原始畫面

MySQL - 依條件更新或新增資料(UPDATE or INSERT WHERE / ON DUPLICATE KEY) - Barry 隨手寫

在這邊要更改 admin_email 的值,而以下語法可以先尋找是否有 option_name= ‘admin_email’ 的 key,如果有就更新 option_value,否則就直接插入一筆資料

SQL 語法

INSERT INTO `wp_options` (`option_id`, `option_name`, `option_value`, `autoload`)
VALUES (NULL, 'admin_email', 'service1@achang.com.tw', 'no')
ON DUPLICATE KEY UPDATE `option_name` = 'admin_email', `option_value`='service1@achang.com.tw', `autoload`='no';

以下是指令執行後的結果,同時我也下了 SELECT 方便直接檢視出結果列表:
(資料表中存在 admin_email 時,更新會是 2 列,否則如果是新增資料,會顯示 1 列)

執行後結果畫面

MySQL - 依條件更新或新增資料(UPDATE or INSERT WHERE / ON DUPLICATE KEY) - Barry 隨手寫

SQL 語法簡述

再來,我們檢視一下語法

INSERT INTO `wp_options` (`option_id`, `option_name`, `option_value`, `autoload`)
VALUES (NULL, 'admin_email', 'service1@achang.com.tw', 'no')
ON DUPLICATE KEY UPDATE `option_name` = 'admin_email', `option_value`='service1@achang.com.tw', `autoload`='no';

ON DUPLICATE KEY UPDATE 可以當作條件,若資料中有 option_name= ‘admin_email’ 時,就會 UPDATE 逗號後面的所有資料
否則就直接使用 INSERT INTO … VALUES 來新增資料哦!

相連文章

臉書留言

一般留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。

這個網站採用 Google reCAPTCHA 保護機制,這項服務遵循 Google 隱私權政策服務條款