引言
許多資料庫表管理的資料需要不時地進行更改或更新。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
要使用 Prisma Client 更新資料,請發出一個更新查詢。
根據另一表中的值更新記錄
基於提供新的外部資料進行的更新相對簡單。您只需提供表、列、新值和目標條件。
但是,您也可以使用 UPDATE 根據連線表中儲存的資訊有條件地更新表值。基本語法如下所示
UPDATE <table1>, <table2>SET <table1>.<column1> = <table2>.<column1>WHERE <table1>.<column2> = <table2>.<column2>;
這裡,我們將 table1 表中 column1 的值更新為 table2 中 column1 儲存的值,但僅限於 table1 的 column2 與 table2 的 column2 匹配的行。即使值只在一個表中更改,我們也需要將兩個表都新增到 UPDATE 操作的表列表中。WHERE 構造指定了連線條件以整合這兩個表。
舉個例子,假設我們有兩個表,名為 film 和 director。
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 (SELECTf1.*FROMfilm f1WHEREf1.id = (SELECTf2.idFROMfilm f2WHEREf2.director_id = f1.director_idORDER BY f2.release_date DESC LIMIT 1))UPDATEdirector, latest_filmsSETdirector.latest_film = latest_films.titleWHEREdirector.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 命令非常靈活,允許您根據資料庫中存在的條件和值,以有趣的方式修改資料。隨著您熟悉此操作,您將能夠找到新的方法來更改資料以滿足您的要求。
