MySQL UPDATE语句

时间:2019-11-20 08:52:07  来源:igfitidea点击:

简介:使用数据库时,更新数据是最重要的任务之一。
在本教程中,您将学习如何使用MySQL UPDATE语句更新表中的数据。

MySQL UPDATE语句简介

UPDATE语句更新表中的数据。
它使您可以更改单行或多行中一或多个列中的值。

下面说明了UPDATE语句的基本语法:

UPDATE [LOW_PRIORITY] [IGNORE] table_name 
SET 
    column_name1 = expr1,
    column_name2 = expr2,
    ...
[WHERE
    condition];

使用以下语法:

  • 首先,在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修改值

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

在此示例中,我们将Mary Patterson的电子邮件更新为新电子邮件[email protected]

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

SELECT 
    firstname, 
    lastname, 
    email
FROM
    employees
WHERE
    employeeNumber = 1056;

其次,将Mary的电子邮件地址更新为新的电子邮件[email protected]

UPDATE employees 
SET 
    email = '[email protected]'
WHERE
    employeeNumber = 1056;

MySQL发出受影响的行数:

1 row(s) affected

在此UPDATE语句中:

  • WHERE子句指定将更新员工号为1056的行。

  • SET子句将email列的值设置为新电子邮件。

第三,再次执行SELECT语句以验证更改:

SELECT 
    firstname, 
    lastname, 
    email
FROM
    employees
WHERE
    employeeNumber = 1056;

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

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

UPDATE employees 
SET 
    lastname = 'Hill',
    email = '[email protected]'
WHERE
    employeeNumber = 1056;

让我们验证一下更改:

SELECT 
    firstname, 
    lastname, 
    email
FROM
    employees
WHERE
    employeeNumber = 1056;

3)使用MySQL UPDATE替换字符串示例

以下示例使用办公代码6更新所有销售代表电子邮件的域部分:

UPDATE employees
SET email = REPLACE(email,'@classicmodelcars.com','@theitroad.local')
WHERE
   jobTitle = 'Sales Rep' AND
   officeCode = 6;

在此示例中,REPLACE()函数用@ theitroad.local替换电子邮件列中的@ classicmodelcars.com。

4)使用MySQL UPDATE更新SELECT语句示例返回的行

您可以从查询其他表中数据的SELECT语句中提供SET子句的值。

例如,在``客户''表中,一些客户没有任何销售代表。
列saleRepEmployeeNumber的值为NULL,如下所示:

SELECT 
    customername, 
    salesRepEmployeeNumber
FROM
    customers
WHERE
    salesRepEmployeeNumber IS NULL;

我们可以聘请销售代表并为这些客户进行更新。

为此,我们可以从employees表中选择一个职位为Sales Rep的随机雇员,并将其更新为employees表。

该查询从表雇员中选择一个随机雇员,该雇员的职称是销售代表。

SELECT 
    employeeNumber
FROM
    employees
WHERE
    jobtitle = 'Sales Rep'
ORDER BY RAND()
LIMIT 1;

要更新客户表中的销售代表员工编号列,我们将上面的查询放在UPDATE语句的SET子句中,如下所示:

UPDATE customers 
SET 
    salesRepEmployeeNumber = (SELECT 
            employeeNumber
        FROM
            employees
        WHERE
            jobtitle = 'Sales Rep'
        ORDER BY RAND()
        LIMIT 1)
WHERE
    salesRepEmployeeNumber IS NULL;

如果您从员工表中查询数据,则会看到每个客户都有一个销售代表。
换句话说,以下查询不返回任何行。

SELECT 
     salesRepEmployeeNumber
FROM
    customers
WHERE
    salesRepEmployeeNumber IS NULL;

在本教程中,您学习了如何使用MySQL UPDATE语句更新数据库表中的数据。