摘要:更新数据是使用数据库时最重要的任务之一。在本教程中,您将学习如何使用 MySQL UPDATE
语句更新表中的数据。
MySQL UPDATE
语句简介
UPDATE
语句更新表中的数据。它允许您更改单行或多行的一列或多列中的值。
下面说明了UPDATE
语句的基本语法:
UPDATE [LOW_PRIORITY] [IGNORE] table_name
SET
column_name1 = expr1,
column_name2 = expr2,
...
[WHERE
condition];
Code language: SQL (Structured Query Language) (sql)
在这个语法中:
- 首先,在
UPDATE
关键字后指定要更新数据的表的名称。 - 其次,指定要更新的列以及
SET
子句中的新值。要更新多列中的值,可以使用逗号分隔的赋值列表,方法是在每列的赋值中以文字值、表达式或子查询的形式提供一个值。 - 第三,使用
WHERE
子句中的条件指定要更新的行。WHERE
子句是可选的。如果省略它,UPDATE
语句将修改表中的所有行。
请注意, WHERE
子句非常重要,您不应忘记。有时,您可能只想更新一行;但是,您可能会忘记WHERE
子句并意外更新表的所有行。
MySQL 在UPDATE
语句中支持两个修饰符。
LOW_PRIORITY
修饰符指示UPDATE
语句延迟更新,直到没有连接从表中读取数据。LOW_PRIORITY
对仅使用表级锁定的存储引擎(例如MyISAM
、MERGE
和MEMORY
生效。- 即使发生错误,
IGNORE
修饰符也使UPDATE
语句能够继续更新行。不会更新导致重复键冲突等错误的行。
MySQL UPDATE
示例
让我们练习一下UPDATE
语句。
1)使用MySQL UPDATE
修改单列中的值示例
请参阅示例数据库中的以下employees
表。

在此示例中,我们将Mary Patterson
的电子邮件更新为新电子邮件[email protected]
。
首先,使用以下SELECT
语句从employees
表中查找 Mary 的电子邮件:
SELECT
firstname,
lastname,
email
FROM
employees
WHERE
employeeNumber = 1056;
Code language: SQL (Structured Query Language) (sql)

其次,将Mary
的电子邮件地址更新为新电子邮件[email protected]
:
UPDATE employees
SET
email = '[email protected]'
WHERE
employeeNumber = 1056;
Code language: SQL (Structured Query Language) (sql)
MySQL 发出受影响的行数:
1 row(s) affected
在此UPDATE
语句中:
WHERE
子句指定将更新员工编号为1056
的行。-
SET
子句将email
列的值设置为新电子邮件。
第三,再次执行SELECT
语句来验证更改:
SELECT
firstname,
lastname,
email
FROM
employees
WHERE
employeeNumber = 1056;
Code language: SQL (Structured Query Language) (sql)

2)使用MySQL UPDATE
修改多列中的值
要更新多个列中的值,您需要在SET
子句中指定分配。例如,以下语句更新员工编号 1056 的姓氏和电子邮件列:
UPDATE employees
SET
lastname = 'Hill',
email = '[email protected]'
WHERE
employeeNumber = 1056;
Code language: SQL (Structured Query Language) (sql)
让我们验证一下更改:
SELECT
firstname,
lastname,
email
FROM
employees
WHERE
employeeNumber = 1056;
Code language: SQL (Structured Query Language) (sql)

3)使用MySQL UPDATE
替换字符串示例
以下示例更新办公室代码为6
的所有Sales Reps
的电子邮件的域部分:
UPDATE employees
SET email = REPLACE(email,'@classicmodelcars.com','@mysqltutorial.org')
WHERE
jobTitle = 'Sales Rep' AND
officeCode = 6;
Code language: SQL (Structured Query Language) (sql)
在此示例中, REPLACE ()
函数将电子邮件列中的@classicmodelcars.com
替换为@mysqltutorial.org
。
4) 使用 MySQL UPDATE
更新SELECT
语句返回的行示例
您可以从从其他表查询数据的SELECT
语句中提供SET
子句的值。
例如,在customers
表中,某些客户没有任何销售代表。 saleRepEmployeeNumber
列的值为NULL
,如下所示:
SELECT
customername,
salesRepEmployeeNumber
FROM
customers
WHERE
salesRepEmployeeNumber IS NULL;
Code language: SQL (Structured Query Language) (sql)

我们可以聘请销售代表并为这些客户提供最新信息。
为此,我们可以从employees
表中随机选择一名职位为Sales Rep
的员工,并将其更新到employees
表中。
此查询从employees
表中随机选择一名职位为Sales Rep
员工。
SELECT
employeeNumber
FROM
employees
WHERE
jobtitle = 'Sales Rep'
ORDER BY RAND()
LIMIT 1;
Code language: SQL (Structured Query Language) (sql)
要更新customers
表中的销售代表员工编号列,我们将上面的查询放在UPDATE
语句的SET
子句中,如下所示:
UPDATE customers
SET
salesRepEmployeeNumber = (SELECT
employeeNumber
FROM
employees
WHERE
jobtitle = 'Sales Rep'
ORDER BY RAND()
LIMIT 1)
WHERE
salesRepEmployeeNumber IS NULL;
Code language: SQL (Structured Query Language) (sql)
如果您从employees
表中查询数据,您将看到每个客户都有一名销售代表。换句话说,以下查询不返回任何行。
SELECT
salesRepEmployeeNumber
FROM
customers
WHERE
salesRepEmployeeNumber IS NULL;
Code language: SQL (Structured Query Language) (sql)
在本教程中,您学习了如何使用 MySQL UPDATE
语句来更新数据库表中的数据。