MySQL UPDATE
简介:更新数据是使用数据库时最重要的任务之一。在本教程中,您将学习如何使用MySQL UPDATE语句更新表中的数据。
MySQL UPDATE语句简介
您可以使用UPDATE
语句更新表中的现有数据。您还可以使用UPDATE
语句更改表中单行,一组行或所有行的列值。
以下说明了MySQL UPDATE
语句的语法:
UPDATE [LOW_PRIORITY] [IGNORE] table_name SET column_name1 = expr1, column_name2 = expr2, ... [WHERE condition];
UPDATE
声明:
- 首先,指定要在
UPDATE
关键字后更新数据的表名。 - 其次,SET子句指定要修改的列和新值。要更新多个列,请使用逗号分隔的分配列表。您可以以文字值,表达式或子查询的形式在每列的赋值中提供值。
- 第三,使用WHERE子句中的条件指定要更新的行。
WHERE
子句是可选项。如果省略WHERE
子句,UPDATE
语句将更新表中的所有行。
注意:
MySQL在WHERE
子句非常重要,您可能只想改变一行; 但是,您可能会忘记WHERE
子句并意外更新表的所有行。
UPDATE
语句中支持两个修饰符。
LOW_PRIORITY
修正指示UPDATE
延迟更新,直到没有连接从表中读取数据的语句。LOW_PRIORITY
只对表级锁的存储引擎使用生效,例如,MyISAM数据,MERGE,MEMORY。IGNORE
修改使UPDATE
语句继续更新,即使发生错误的行。导致错误(例如重复键冲突)的行不会更新。
MySQL UPDATE示例
让我们UPDATE
用MySQL示例数据库中的一些表来练习语句。
使用MySQL UPDATE修改单列中的值示例
在此示例中,我们将更新Mary Patterson
新电子邮件的电子邮件mary.patterso@classicmodelcars.com
。
首先,为了确保更新成功,我们employees
使用以下SELECT
语句从表中查询Mary的电子邮件:
SELECT firstname, lastname, email FROM employees WHERE employeeNumber = 1056;运行结果:
+-----------+-----------+----------------------+ | firstname | lastname | email | +-----------+-----------+----------------------+ | Mary | Patterson | mpatterso@yiibai.com | +-----------+-----------+----------------------+ 1 row in set (0.02 sec)其次,我们可以使用
UPDATE
以下查询中显示的语句将Mary的电子邮件更新为新电子邮件mary.patterson@classicmodelcars.com
:
UPDATE employees SET email = 'mary.patterson@classicmodelcars.com' WHERE employeeNumber = 1056;因为我们只想更新一行,所以我们使用
WHERE
子句使用员工编号指定行 1056
。SET
子句将email
列的值设置为新电子邮件。
第三,我们SELECT
再次执行语句以验证更改。
SELECT firstname, lastname, email FROM employees WHERE employeeNumber = 1056;运行结果:
+-----------+-----------+-------------------------------------+ | firstname | lastname | email | +-----------+-----------+-------------------------------------+ | Mary | Patterson | mary.patterson@classicmodelcars.com | +-----------+-----------+-------------------------------------+ 1 row in set (0.00 sec)
使用MySQL UPDATE修改多列中的值
要更新多列中的值,您需要在SET
子句中指定赋值。例如,以下语句更新员工编号1056的姓氏和电子邮件列:
UPDATE employees SET lastname = 'Hill', email = 'mary.hill@classicmodelcars.com' WHERE employeeNumber = 1056;我们来检查一下这些变化:
SELECT firstname, lastname, email FROM employees WHERE employeeNumber = 1056;运行结果:
+-----------+----------+--------------------------------+ | firstname | lastname | email | +-----------+----------+--------------------------------+ | Mary | Hill | mary.hill@classicmodelcars.com | +-----------+----------+--------------------------------+ 1 row in set (0.00 sec)
使用MySQL UPDATE更新SELECT语句返回的行
您可以使用子查询得到的值复制给指定的字段更新。 例如,在customers
表中,一些客户没有任何销售代表。saleRepEmployeeNumber
列的值是NULL
如下:
SELECT customername, salesRepEmployeeNumber FROM customers WHERE salesRepEmployeeNumber IS NULL;运行结果:
+------------------------------------+------------------------+ | customername | salesRepEmployeeNumber | +------------------------------------+------------------------+ | Atelier graphique | NULL | | Signal Gift Stores | NULL | | Australian Collectors, Co. | NULL | | La Rochelle Gifts | NULL | | Baane Mini Imports | NULL | | Mini Gifts Distributors Ltd. | NULL | ...我们可以为这些客户提供销售代表并进行更新。 为此,我们可以选择一个随机员工,其职位名称
Sales Rep
来自employees
表,并更新employees
表 。
此查询从作业标题为的表中选择一个随机员工。employees
Sales Rep
SELECT employeeNumber FROM employees WHERE jobtitle = 'Sales Rep' ORDER BY RAND() LIMIT 1;要更新表中的销售代表员工编号列
customers
,我们将上面的查询放在UPDATE
语句的SET
子句中,如下所示:
UPDATE customers SET salesRepEmployeeNumber = (SELECT employeeNumber FROM employees WHERE jobtitle = 'Sales Rep' LIMIT 1) WHERE salesRepEmployeeNumber IS NULL;如果您从
employees
表中查询数据 ,您将看到每个客户都有销售代表。换句话说,以下查询不返回任何行。
SELECT salesRepEmployeeNumber FROM customers WHERE salesRepEmployeeNumber IS NOT NULL;在本教程中,您学习了如何使用MySQL
UPDATE
语句更新数据库表中的数据。