MySQL UPDATE

摘要:更新数据是使用数据库时最重要的任务之一。在本教程中,您将学习如何使用 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语句中支持两个修饰符。

  1. LOW_PRIORITY修饰符指示UPDATE语句延迟更新,直到没有连接从表中读取数据。 LOW_PRIORITY对仅使用表级锁定的存储引擎(例如MyISAMMERGEMEMORY生效。
  2. 即使发生错误, IGNORE修饰符也使UPDATE语句能够继续更新行。不会更新导致重复键冲突等错误的行。

MySQL UPDATE示例

让我们练习一下UPDATE语句。

1)使用MySQL UPDATE修改单列中的值示例

请参阅示例数据库中的以下employees表。

员工表

在此示例中,我们将Mary Patterson的电子邮件更新为新电子邮件mary.patterso@classicmodelcars.com

首先,使用以下SELECT语句从employees表中查找 Mary 的电子邮件:

SELECT 
    firstname, 
    lastname, 
    email
FROM
    employees
WHERE
    employeeNumber = 1056;Code language: SQL (Structured Query Language) (sql)
MySQL Update example

其次,将Mary的电子邮件地址更新为新电子邮件mary.patterson@classicmodelcars.com

UPDATE employees 
SET 
    email = 'mary.patterson@classicmodelcars.com'
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)
MySQL UPDATE table example

2)使用MySQL UPDATE修改多列中的值

要更新多个列中的值,您需要在SET子句中指定分配。例如,以下语句更新员工编号 1056 的姓氏和电子邮件列:

UPDATE employees 
SET 
    lastname = 'Hill',
    email = 'mary.hill@classicmodelcars.com'
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)
MySQL 更新多列

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)
MySQL UPDATE From SELECT example

我们可以聘请销售代表并为这些客户提供最新信息。

为此,我们可以从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语句来更新数据库表中的数据。

本教程有帮助吗?