简介
许多数据库表管理的数据需要不时更改或更新。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');
这两张表与引用 director.id
的 film.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 结构结合使用时非常灵活,允许您根据整个数据库中找到的条件和值以有趣的方式修改数据。当您熟悉该操作后,您将能够找到更改数据以满足您需求的新方法。