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
标识符。