介绍
许多数据库表管理需要不时更改或更新的数据。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 记录的值。 UPDATE
命令与其他 SQL 结构结合使用时非常灵活,允许您根据数据库中找到的条件和值以有趣的方式修改数据。随着您熟悉操作,您将能够找到更改数据以满足您的要求的新方法。