MySQL UPDATE 用法与实例
在本文中,我们讨论了在 MySQL 中使用 UPDATE 语句更新表中的数据。
如果想要更新表中的已有的数据行,需要使用到 UPDATE 语句。
UPDATE 语法
UPDATE 语句可以更新表中的一行或者多行数据,可以更新表中的一个或者多个字段(列)。 以下是 UPDATE 语句的基本语法:
UPDATE [IGNORE] table_name
SET
column_name1 = value1,
column_name2 = value2,
...
[WHERE clause];
用法说明:
UPDATE关键字后指定要更新数据的表名。- 使用
SET子句设置字段的新值。多个字段使用逗号分隔。字段的值可以是普通的字面值,也可以是表达式运算,还可以是子查询。 - 使用
WHERE子句指定要更新的行。只有符合WHERE条件的行才会被更新。 WHERE子句是可选的。如果不指定WHERE子句,则更新表中的所有行。
UPDATE 语句中的 WHERE 子句非常重要。除非您特意,否则不要省略 WHERE 子句。
UPDATE 实例
下面我们将通过几个实例来展示 UPDATE 的具体用法。
在以下实例中,我们使用 Sakila 示例数据库中的 customer 表 进行演示。
使用 UPDATE 修改单列值
在这个例子中,我们将把 customer_id 等于 1 的客户的电子邮件修改为 [email protected]。
-
使用以下
SELECT语句查看更新前的数据。SELECT first_name, last_name, email FROM customer WHERE customer_id = 1;+------------+-----------+-------------------------------+ | first_name | last_name | email | +------------+-----------+-------------------------------+ | MARY | SMITH | [email protected] | +------------+-----------+-------------------------------+ 1 row in set (0.00 sec) -
使用以下
UPDATE语句更新email字段的值。UPDATE customer SET email = '[email protected]' WHERE customer_id = 1;Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0在此
UPDATE语句中:- 通过
WHERE子句指定更新的条件为customer_id = 1。 - 通过
SET子句将email列的值设置为新电子邮件。
在
UPDATE输出的结果中:1 row affected表示 1 行数据受影响。也就是更新了 1 行数据。Rows matched: 1表示匹配的WHERE条件的行数是 1。Changed: 1表示修改的行数是 1。Warnings: 0表示没有需要注意的事项。
- 通过
-
使用以下
SELECT语句查看更新后的数据,以验证是否更新成功。SELECT first_name, last_name, email FROM customer WHERE customer_id = 1;+------------+-----------+-----------------------------------+ | first_name | last_name | email | +------------+-----------+-----------------------------------+ | MARY | SMITH | [email protected] | +------------+-----------+-----------------------------------+ 1 row in set (0.01 sec)
使用 UPDATE 修改多列值
在这个例子中,我们将同时更新 customer_id 等于 1 的客户的 first_name, last_name, email。
UPDATE customer
SET first_name = 'Tim',
last_name = 'Duncan',
email = '[email protected]'
WHERE customer_id = 1;
然后,我们再次验证更新后的数:
SELECT first_name, last_name, email
FROM customer
WHERE customer_id = 1;
+------------+-----------+-------------------------------+
| first_name | last_name | email |
+------------+-----------+-------------------------------+
| Tim | Duncan | [email protected] |
+------------+-----------+-------------------------------+
1 row in set (0.00 sec)使用表达式更新
使用 UPDATE 更新时,字段的值可以设置为表达式的运算结果,比如函数或其他的运算。
下面的 UPDATE 更新所有客户的电子邮件的域名部分:
UPDATE customer
SET email = REPLACE(email, 'sakilacustomer.org', 'sjkjc.com');
Query OK, 599 rows affected (0.03 sec)
Rows matched: 599 Changed: 599 Warnings: 0注意,本例中没有使用 WHERE 子句,所以表中所有的数据都进行了更新。
使用子查询更新
下面实例展示了如何为没有绑定商店的客户绑定一个随机商店。
UPDATE customer
SET store_id = (
SELECT store_id
FROM store
ORDER BY RAND()
LIMIT 1
)
WHERE store_id IS NULL;
在本例中,我们通过以下 SELECT 语句返回一个随机的商店 id:
SELECT store_id
FROM store
ORDER BY RAND()
LIMIT 1
在 SET 子句中,将 store_id 的值设置为上面的子查询。
UPDATE 修饰符
在 MySQL 中, UPDATE 语句支持 2 个修饰符:
-
LOW_PRIORITY: 如果你指定了LOW_PRIORITY修饰符,MySQL 服务器将延迟执行UPDATE操作直到没有客户端对表进行读操作。LOW_PRIORITY修饰符影响那些只支持表级锁的存储引擎,比如:MyISAM,MEMORY, 和MERGE。 -
IGNORE: 如果你指定了IGNORE修饰符,MySQL 服务器会在执行UPDATE操作期间忽略那些可忽略的错误。这些错误最终会作为WARNING返回。
修饰符的用法如下:
UPDATE [LOW_PRIORITY] [IGNORE] table_name SET column_name = value
结论
在本文中,我们通过实例介绍了在 MySQL 中使用 UPDATE 语句从表中删除满足条件的记录行。以下是 UPDATE 语句的要点:
UPDATE语句可以更新表中的一行或者多行数据,可以更新表中的一个或者多个字段。- 使用
SET子句设置字段的新值。多个字段使用逗号分隔。字段的值可以是普通的字面值,也可以是表达式运算,还可以是子查询。 - 使用
WHERE子句指定要更新的行。只有符合WHERE条件的行才会被更新。 WHERE子句是可选的。如果不指定WHERE子句,则更新表中的所有行。请不要省略WHERE子句,除非你知道要做什么。UPDATE语句支持的修饰符有:LOW_PRIORITY和IGNORE。如果想忽略一些错误行,可使用IGNORE标识符。