分享到

簡介

許多資料庫表格管理著需要不時變更或更新的資料。SQL UPDATE 命令可以在這些情況下提供協助,讓您變更表格中記錄中儲存的值。

若要更新記錄,您必須提供將發生變更的欄位及其新值。為了告知 MySQL 要目標鎖定哪些記錄,您還需要提供比對條件,以便它可以判斷要變更的列或多列。在本文中,我們將討論如何使用 UPDATE 一次一個或批量變更表格資料的值。

使用 UPDATE 修改資料

UPDATE 命令的基本語法如下所示

UPDATE <table>
SET
<column1> = <value1>,
<column2> = <value2>
WHERE
<match_condition>;

如上所示,基本結構包含三個獨立的子句

  • 指定要操作的表格,
  • 提供您想要更新的欄位以及其新值,以及
  • 定義條件以判斷要比對的記錄

成功提交後,MySQL 會輸出比對和變更的列數,以確認此動作

Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

根據另一個表格中的值更新記錄

根據提供的新外部資料進行更新相對簡單。您只需要提供表格、欄位、新值和目標條件即可。

但是,您也可以使用 UPDATE,根據儲存在聯結表格中的資訊,有條件地更新表格值。基本語法如下所示

UPDATE <table1>, <table2>
SET <table1>.<column1> = <table2>.<column1>
WHERE <table1>.<column2> = <table2>.<column2>;

在這裡,我們將 table1 表格中 column1 的值更新為 table2column1 中儲存的值,但僅限於 table1column2table2column2 相符的列。即使值僅在一個表格中變更,我們仍需要將兩個表格都新增至 UPDATE 運作的表格清單中。WHERE 結構指定了整合兩個表格的聯結條件。

舉例來說,假設我們有兩個表格,分別名為 filmdirector

CREATE TABLE director (
id SERIAL PRIMARY KEY,
name VARCHAR(200) NOT NULL,
latest_film VARCHAR(200)
);
CREATE TABLE film (
id SERIAL PRIMARY KEY,
title VARCHAR(200) NOT NULL,
director_id INT REFERENCES director(id),
release_date DATE NOT NULL
);
INSERT INTO director (name)
VALUES
('frank'),
('bob'),
('sue');
INSERT INTO film (title, director_id, release_date)
VALUES
('first movie', 1, '2010-08-24'),
('second movie', 1, '2010-12-15'),
('third movie', 2, '2011-01-01'),
('fourth movie', 2, '2012-08-02');

這兩個表格透過 film.director_id 參考 director.id 建立關聯。目前,director 表格的 latest_filmNULL。但是,我們可以透過使用 WHERE 子句將兩個表格結合在一起,以導演的最新電影標題來填入它。

在這裡,我們使用 WITH 子句建立一個名為 latest_films 的通用表格運算式 (CTE),我們可以在 UPDATE 陳述式中參考它

WITH latest_films AS (
SELECT
f1.*
FROM
film f1
WHERE
f1.id = (SELECT
f2.id
FROM
film f2
WHERE
f2.director_id = f1.director_id
ORDER BY f2.release_date DESC LIMIT 1))
UPDATE
director, latest_films
SET
director.latest_film = latest_films.title
WHERE
director.id = latest_films.director_id;

如果您查詢 director 表格,現在應該會顯示每位導演的最新電影

SELECT * FROM director;
+----+-------+--------------+
id | name | latest_film |
+----+-------+--------------+
1 | frank | second movie |
2 | bob | fourth movie |
3 | sue | NULL |
+----+-------+--------------+
3 rows in set (0.00 sec)

結論

在本文中,我們示範了如何使用 UPDATE 命令來變更現有 MySQL 記錄的值。UPDATE 命令在與其他 SQL 結構結合使用時非常靈活,可讓您根據整個資料庫中找到的條件和值,以有趣的方式修改資料。當您熟悉此操作後,您將能夠找到新的方法來變更資料以符合您的需求。

關於作者
Justin Ellingwood

Justin Ellingwood

Justin 自 2013 年以來一直撰寫關於資料庫、Linux、基礎架構和開發人員工具的文章。他目前與妻子和兩隻兔子住在柏林。他通常不必以第三人稱寫作,這對所有相關方來說都是一種解脫。