分享到

引言

許多資料庫表管理的資料需要不時地進行更改或更新。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_film 值為 NULL。但是,我們可以使用 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 記錄的值。當與其它 SQL 構造結合使用時,UPDATE 命令非常靈活,允許您根據資料庫中存在的條件和值,以有趣的方式修改資料。隨著您熟悉此操作,您將能夠找到新的方法來更改資料以滿足您的要求。

關於作者
Justin Ellingwood

Justin Ellingwood

自 2013 年以來,Justin 一直在撰寫有關資料庫、Linux、基礎設施和開發者工具的文章。他目前與妻子和兩隻兔子住在柏林。他通常不必使用第三人稱寫作,這讓所有相關方都鬆了一口氣。
© . This site is unofficial and not affiliated with Prisma Data, Inc.