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