分享到

介绍

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

关于作者
Justin Ellingwood

Justin Ellingwood

Justin 自 2013 年起一直在撰写有关数据库、Linux、基础设施和开发人员工具的文章。他目前与妻子和两只兔子住在柏林。他通常不必以第三人称写作,这对所有相关方来说都是一种解脱。