簡介
許多資料庫表格管理著需要不時變更或更新的資料。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 query。
根據另一個表格中的值更新記錄
根據提供的新外部資料進行更新相對簡單。您只需要提供表格、欄位、新值和目標條件即可。
但是,您也可以使用 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 記錄的值。UPDATE
命令在與其他 SQL 結構結合使用時非常靈活,可讓您根據整個資料庫中找到的條件和值,以有趣的方式修改資料。當您熟悉此操作後,您將能夠找到新的方法來變更資料以符合您的需求。