求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
要资料
 
 

mysql教程
MySQL快速学习入门
MySQL是什么
MySQL安装
MySQL示例数据库
MySQL导入示例数据库
MySQL基础教程
MySQL查询数据
MySQL WHERE语句
MySQL插入数据
MySQL更新表数据
MySQL删除表数据
MySQL创建与删除数据库
MySQL创建表
MySQL修改表结构
MySQL重命名表
MySQL数据类型
高级部分
MySQL技巧
MySQL存储过程
MySQL视图
MySQL触发器
MySQL管理
MySQL全文搜索
MySQL函数
应用程序连接
MySQL+Node.js连接和操作
Python+MySQL连接和操作
 
 

MySQL更新表数据
1106 次浏览
23次  

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

1. 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语句将更新表中的所有行。

请注意,WHERE子句非常重要,所以不应该忘记指定更新的条件。 有时,您可能只想改变一行; 但是,可能会忘记写上WHERE子句,导致意外更新表中的所有行。

MySQL在UPDATE语句中支持两个修饰符。

LOW_PRIORITY修饰符指示UPDATE语句延迟更新,直到没有从表中读取数据的连接。 LOW_PRIORITY对仅使用表级锁定的存储引擎(例如MyISAM,MERGE,MEMORY)生效。

即使发生错误,IGNORE修饰符也可以使UPDATE语句继续更新行。导致错误(如重复键冲突)的行不会更新。

2. MySQL UPDATE示例

我们使用MySQL示例数据库(yiibaidb)中的一些表来练习使用UPDATE语句。

2.1 MySQL UPDATE一个单列示例

在这个例子中,我们将把 Mary Patterson 的电子邮件更新为新的电子邮件mary.patterso@yiibai.com。

首先,为了确保更新电子邮件成功,使用以下SELECT语句从employees表查询Mary的电子邮件:

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

执行上面的查询语句,得到以下结果 -

+-----------+-----------+----------------------+
| firstname | lastname | email |
+-----------+-----------+----------------------+
| Mary | Patterson | mpatterso@yiibai.com |
+-----------+-----------+----------------------+
1 row in set

第二步,使用UPDATE语句将Mary的电子邮件更新为新的电子邮件:mary.new@yiibai.com,如下查询所示:

<
UPDATE employees
SET
email = 'mary.new@yiibai.com'
WHERE
employeeNumber = 1056;

因为上面语句中,只想更新一行,所以使用WHERE子句来指定更新的是员工编号1056的行。SET子句将电子邮件列的值设置为新的电子邮件。

第三,再次执行SELECT语句来验证更改。

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

再次执行上面的查询语句,得到以下结果 -

+-----------+-----------+---------------------+
| firstname | lastname | email |
+-----------+-----------+---------------------+
| Mary | Patterson | mary.new@yiibai.com |
+-----------+-----------+---------------------+
1 row in set

2.2 MySQL UPDATE多列

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

UPDATE employees
SET
lastname = 'Hill',
email = 'mary.hill@yiibai.com'
WHERE
employeeNumber = 1056;

在执行上面语句之后,查询员工编号为:1056的记录,如下所示 -

+-----------+----------+----------------------+
| firstname | lastname | email |
+-----------+----------+----------------------+
| Mary | Hill | mary.hill@yiibai.com |
+-----------+----------+----------------------+
1 row in set

2.3 使用SELECT语句的MySQL UPDATE示例

可以使用SELECT语句查询来自其他表的数据来提供给SET子句的值。

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

mysql> SELECT
customername, salesRepEmployeeNumber
FROM
customers
WHERE
salesRepEmployeeNumber IS NULL;
+--------------------------------+------------------------+
| customername | salesRepEmployeeNumber |
+--------------------------------+------------------------+
| Havel & Zbyszek Co | NULL |
| Porto Imports Co. | NULL |
| Asian Shopping Network, Co | NULL |
| Natrlich Autos | NULL |
| ANG Resellers | NULL |
| Messner Shopping Network | NULL |
| Franken Gifts, Co | NULL |
| BG&E Collectables | NULL |
| Schuyler Imports | NULL |
| Der Hund Imports | NULL |
| Cramer Spezialitten, Ltd | NULL |
| Asian Treasures, Inc. | NULL |
| SAR Distributors, Co | NULL |
| Kommission Auto | NULL |
| Lisboa Souveniers, Inc | NULL |
| Stuttgart Collectable Exchange | NULL |
| Feuer Online Stores, Inc | NULL |
| Warburg Exchange | NULL |
| Anton Designs, Ltd. | NULL |
| Mit Vergngen & Co. | NULL |
| Kremlin Collectables, Co. | NULL |
| Raanan Stores, Inc | NULL |
+--------------------------------+------------------------+
22 rows in set

我们可以为这些客户提供销售代表和更新。

为此,需要从employees表中随机选择一个职位为Sales Rep的雇员,并将其更新到employees表中。

下面的查询语句是从employees表中随机选择一个其职位是Sales Rep的员工。

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

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

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

如果在执行上面更新语句后,查询customers表中的数据,将看到每个客户都有一个销售代表。 换句话说,以下查询不返回任何行数据。

SELECT
salesRepEmployeeNumber
FROM
customers
WHERE
salesRepEmployeeNumber IS NULL;

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


您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码: 验证码,看不清楚?请点击刷新验证码 必填



1106 次浏览
23次
 捐助