資料庫

MySQL/MariaDB 資料庫 UPDATE 更新資料指令用法教學

介紹如何在 MySQL/MariaDB 資料庫使用 UPDATE 指令更新指定的資料。

建立測試用資料

為了示範 UPDATE 使用方式,我們先建立測試用的 products 資料表:

-- 建立 products 資料表
CREATE TABLE products (
  id INT NOT NULL AUTO_INCREMENT,
  name VARCHAR(255),
  price INT UNSIGNED,
  inventory INT UNSIGNED,
  last_update DATE,
  PRIMARY KEY (id)
);

再插入一些測試用的資料:

-- 新增資料
INSERT INTO products (name, price, inventory, last_update) VALUES
  ("A031", 320, 9, "2015-10-14"),
  ("C001", 420, 0, "2013-03-08"),
  ("B021", 280, 3, "2013-12-02"),
  ("Y158", 690, 4, "2015-11-21"),
  ("A202", 195, 1, "2019-02-23"),
  ("D022", 540, 5, "2017-03-19");

顯示測試用的資料:

-- 顯示所有資料
SELECT * FROM products;
+----+------+-------+-----------+-------------+
| id | name | price | inventory | last_update |
+----+------+-------+-----------+-------------+
|  1 | A031 |   320 |         9 | 2015-10-14  |
|  2 | C001 |   420 |         0 | 2013-03-08  |
|  3 | B021 |   280 |         3 | 2013-12-02  |
|  4 | Y158 |   690 |         4 | 2015-11-21  |
|  5 | A202 |   195 |         1 | 2019-02-23  |
|  6 | D022 |   540 |         5 | 2017-03-19  |
+----+------+-------+-----------+-------------+

UPDATE 更新資料

UPDATE 可以用來更新資料表中已經存在的資料,例如更新某項產品的售價,同時更新 last_update 欄位(記錄最後更新日期):

-- 新增資料
UPDATE products SET price = 480, last_update = CURDATE() WHERE id = 1;

查看更新後的結果:

-- 查看更新結果
SELECT * FROM products WHERE id = 1;
+----+------+-------+-----------+-------------+
| id | name | price | inventory | last_update |
+----+------+-------+-----------+-------------+
|  1 | A031 |   480 |         9 | 2019-10-15  |
+----+------+-------+-----------+-------------+

遞增、遞減更新數值

除了直接指定新的值之外,UPDATE 也可以根據原始的數值遞增或遞減(或其他各種運算),例如進貨時增加庫存量:

-- 遞增更新資料
UPDATE products SET inventory = inventory + 5 WHERE id = 1;

查看更新後的結果:

-- 查看更新結果
SELECT * FROM products WHERE id = 1;
+----+------+-------+-----------+-------------+
| id | name | price | inventory | last_update |
+----+------+-------+-----------+-------------+
|  1 | A031 |   480 |        14 | 2019-10-15  |
+----+------+-------+-----------+-------------+

依序更新

有時候再更新多筆資料時,更新的先後順序會有影響,這時候就可以利用 ORDER BY 來指定更新的順序。

假設我們現在想更改資料的主 id 欄位,將每筆資料的主 id 都遞增 1,但是由於主 id 是不可以重複的,我們必須從最大 id 資料開始更新,否則就會出現 id 重複的錯誤,這時候就可以這樣寫:

-- 依序更新資料
UPDATE products SET id = id + 1 ORDER BY id DESC;

更新之後的資料會像這樣:

-- 顯示所有資料
SELECT * FROM products;
+----+------+-------+-----------+-------------+
| id | name | price | inventory | last_update |
+----+------+-------+-----------+-------------+
|  2 | A031 |   480 |        14 | 2019-10-15  |
|  3 | C001 |   420 |         0 | 2013-03-08  |
|  4 | B021 |   280 |         3 | 2013-12-02  |
|  5 | Y158 |   690 |         4 | 2015-11-21  |
|  6 | A202 |   195 |         1 | 2019-02-23  |
|  7 | D022 |   540 |         5 | 2017-03-19  |
+----+------+-------+-----------+-------------+

跨資料表更新

UPDATE 也可以橫跨多張資料表更新,例如:

-- 跨資料表更新
UPDATE products, orders SET orders.price = product.price
  WHERE orders.name = products.name;

參考資料:MySQL 官方文件

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

9 個月 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

9 個月 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

9 個月 ago

Windows 使用 TPM 虛擬智慧卡保護 SSH 金鑰教學與範例

本篇介紹如何在 Windows...

10 個月 ago

Linux 以 Shamir’s Secret Sharing 分割保存金鑰教學與範例

介紹如何在 Linux 中使用...

11 個月 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

11 個月 ago