当前位置:网站首页>数据库系统原理与应用教程(027)—— MySQL 修改表中数据(三):改(update)
数据库系统原理与应用教程(027)—— MySQL 修改表中数据(三):改(update)
2022-07-20 01:44:00 【睿思达DBA_WGX】
数据库系统原理与应用教程(027)—— MySQL 修改表中数据(三):改(update)
目录
使用 UPDATE 命令可以对表中的数据进行更新,该命令的语法格式如下:
UPDATE 表名
SET 列名 = 表达式 [, 列名 = 表达式 ...]
[WHERE 条件]
[ORDER BY ...]
[LIMIT row_count]
/* 说明: (1)使用 set 参数为某个字段指定新数据值。 (2)ORDER BY:按照指定的顺序对行进行更新。 (3)LIMIT:限制可更新的行数。 */
UPDATE 表1 join 表2 on 表1.列名 = 表2.列名
SET 列名 = 表达式 [, 列名 = 表达式 ...]
[WHERE 条件]
/* 说明: (1)利用 表2 中的数据更新 表1,要求两个表必须存在关联字段。 (2)表1 和 表2 关联的条件为 表1.列名 = 表2.列名。 */
一、更新表中满足指定条件的数据值
emp 表中的数据如下:
mysql> select * from emp;
+------+--------------+--------+---------------------+---------+-------------+---------+
| e_id | e_name | gender | jobtime | salary | phone | dept_id |
+------+--------------+--------+---------------------+---------+-------------+---------+
| 1001 | 张涛 | 男 | 2018-06-25 00:00:00 | 4950.00 | 13637354888 | D01 |
| 1003 | 刘晶晶 | 女 | 2020-07-15 00:00:00 | 3265.00 | 13072664666 | D02 |
| 1005 | 欧阳鸿海 | 男 | 2018-04-28 00:00:00 | 4821.00 | 13937356588 | D03 |
| 2001 | 关羽 | 男 | 2020-07-30 00:00:00 | 4850.00 | 13603731111 | D03 |
| 2002 | 刘蓓 | 女 | 2018-07-18 00:00:00 | 4250.00 | 13603732222 | D03 |
| 2003 | 张菲 | 女 | 2018-06-20 00:00:00 | 3980.00 | 13603733333 | D03 |
| 3001 | 林冲 | 男 | 2022-07-15 00:00:00 | NULL | 13603735555 | D03 |
| 3002 | 宋江 | 男 | 2022-07-15 00:00:00 | NULL | 13603736666 | D03 |
+------+--------------+--------+---------------------+---------+-------------+---------+
8 rows in set (0.18 sec)
1、更新表中满足指定条件的所有记录的数据值
例如:
(1)把 salary 列为空的两条记录的 salary 设置为 3000
mysql> update emp set salary = 3000 where salary is null;
Query OK, 2 rows affected (0.09 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> select * from emp;
+------+--------------+--------+---------------------+---------+-------------+---------+
| e_id | e_name | gender | jobtime | salary | phone | dept_id |
+------+--------------+--------+---------------------+---------+-------------+---------+
| 1001 | 张涛 | 男 | 2018-06-25 00:00:00 | 4950.00 | 13637354888 | D01 |
| 1003 | 刘晶晶 | 女 | 2020-07-15 00:00:00 | 3265.00 | 13072664666 | D02 |
| 1005 | 欧阳鸿海 | 男 | 2018-04-28 00:00:00 | 4821.00 | 13937356588 | D03 |
| 2001 | 关羽 | 男 | 2020-07-30 00:00:00 | 4850.00 | 13603731111 | D03 |
| 2002 | 刘蓓 | 女 | 2018-07-18 00:00:00 | 4250.00 | 13603732222 | D03 |
| 2003 | 张菲 | 女 | 2018-06-20 00:00:00 | 3980.00 | 13603733333 | D03 |
| 3001 | 林冲 | 男 | 2022-07-15 00:00:00 | 3000.00 | 13603735555 | D03 |
| 3002 | 宋江 | 男 | 2022-07-15 00:00:00 | 3000.00 | 13603736666 | D03 |
+------+--------------+--------+---------------------+---------+-------------+---------+
8 rows in set (0.00 sec)
(2)把【D02】部门的员工的 salary 增加20%
mysql> update emp set salary = salary * 1.2 where dept_id='D02';
Query OK, 1 row affected (0.09 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from emp;
+------+--------------+--------+---------------------+---------+-------------+---------+
| e_id | e_name | gender | jobtime | salary | phone | dept_id |
+------+--------------+--------+---------------------+---------+-------------+---------+
| 1001 | 张涛 | 男 | 2018-06-25 00:00:00 | 4950.00 | 13637354888 | D01 |
| 1003 | 刘晶晶 | 女 | 2020-07-15 00:00:00 | 3918.00 | 13072664666 | D02 |
| 1005 | 欧阳鸿海 | 男 | 2018-04-28 00:00:00 | 4821.00 | 13937356588 | D03 |
| 2001 | 关羽 | 男 | 2020-07-30 00:00:00 | 4850.00 | 13603731111 | D03 |
| 2002 | 刘蓓 | 女 | 2018-07-18 00:00:00 | 4250.00 | 13603732222 | D03 |
| 2003 | 张菲 | 女 | 2018-06-20 00:00:00 | 3980.00 | 13603733333 | D03 |
| 3001 | 林冲 | 男 | 2022-07-15 00:00:00 | 3000.00 | 13603735555 | D03 |
| 3002 | 宋江 | 男 | 2022-07-15 00:00:00 | 3000.00 | 13603736666 | D03 |
+------+--------------+--------+---------------------+---------+-------------+---------+
8 rows in set (0.00 sec)
2、更新指定数量的记录的数据值
(1)把 salary 最小的两条记录的 salary 增加 1000
mysql> update emp set salary = salary + 1000 order by salary limit 2;
Query OK, 2 rows affected (0.03 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> select * from emp;
+------+--------------+--------+---------------------+---------+-------------+---------+
| e_id | e_name | gender | jobtime | salary | phone | dept_id |
+------+--------------+--------+---------------------+---------+-------------+---------+
| 1001 | 张涛 | 男 | 2018-06-25 00:00:00 | 4950.00 | 13637354888 | D01 |
| 1003 | 刘晶晶 | 女 | 2020-07-15 00:00:00 | 3918.00 | 13072664666 | D02 |
| 1005 | 欧阳鸿海 | 男 | 2018-04-28 00:00:00 | 4821.00 | 13937356588 | D03 |
| 2001 | 关羽 | 男 | 2020-07-30 00:00:00 | 4850.00 | 13603731111 | D03 |
| 2002 | 刘蓓 | 女 | 2018-07-18 00:00:00 | 4250.00 | 13603732222 | D03 |
| 2003 | 张菲 | 女 | 2018-06-20 00:00:00 | 3980.00 | 13603733333 | D03 |
| 3001 | 林冲 | 男 | 2022-07-15 00:00:00 | 4000.00 | 13603735555 | D03 |
| 3002 | 宋江 | 男 | 2022-07-15 00:00:00 | 4000.00 | 13603736666 | D03 |
+------+--------------+--------+---------------------+---------+-------------+---------+
8 rows in set (0.00 sec)
(2)把【D03】部门 salary 最低的员工的 salary 增加 1000
mysql> update emp set salary = salary + 1000 where dept_id = 'D03' order by salary limit 1;
Query OK, 1 row affected (0.02 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from emp;
+------+--------------+--------+---------------------+---------+-------------+---------+
| e_id | e_name | gender | jobtime | salary | phone | dept_id |
+------+--------------+--------+---------------------+---------+-------------+---------+
| 1001 | 张涛 | 男 | 2018-06-25 00:00:00 | 4950.00 | 13637354888 | D01 |
| 1003 | 刘晶晶 | 女 | 2020-07-15 00:00:00 | 3918.00 | 13072664666 | D02 |
| 1005 | 欧阳鸿海 | 男 | 2018-04-28 00:00:00 | 4821.00 | 13937356588 | D03 |
| 2001 | 关羽 | 男 | 2020-07-30 00:00:00 | 4850.00 | 13603731111 | D03 |
| 2002 | 刘蓓 | 女 | 2018-07-18 00:00:00 | 4250.00 | 13603732222 | D03 |
| 2003 | 张菲 | 女 | 2018-06-20 00:00:00 | 4980.00 | 13603733333 | D03 |
| 3001 | 林冲 | 男 | 2022-07-15 00:00:00 | 4000.00 | 13603735555 | D03 |
| 3002 | 宋江 | 男 | 2022-07-15 00:00:00 | 4000.00 | 13603736666 | D03 |
+------+--------------+--------+---------------------+---------+-------------+---------+
8 rows in set (0.00 sec)
二、利用另一个表中的数据更新当前表
语法格式如下:
UPDATE 表1 join 表2 on 表1.列名 = 表2.列名
SET 列名 = 表达式 [, 列名 = 表达式 ...]
[WHERE 条件]
/* 说明: (1)利用 表2 中的数据更新 表1,要求两个表必须存在关联字段。 (2)表1 和 表2 关联的条件为 表1.列名 = 表2.列名。 */
例如:有如下两张数据表:
mysql> select * from dept;
+---------+-----------+--------------+
| dept_id | dept_name | phone |
+---------+-----------+--------------+
| D01 | 财务部 | 0373-3087111 |
| D02 | 销售部 | 0373-3087222 |
| D03 | 研发部 | 0373-3087333 |
| D04 | 售后部 | 0373-3087444 |
| D05 | 公关部 | NULL |
+---------+-----------+--------------+
5 rows in set (0.01 sec)
mysql> select * from emp;
+------+--------------+--------+---------------------+---------+-------------+---------+
| e_id | e_name | gender | jobtime | salary | phone | dept_id |
+------+--------------+--------+---------------------+---------+-------------+---------+
| 1001 | 张涛 | 男 | 2018-06-25 00:00:00 | 4950.00 | 13637354888 | D01 |
| 1003 | 刘晶晶 | 女 | 2020-07-15 00:00:00 | 3918.00 | 13072664666 | D02 |
| 1005 | 欧阳鸿海 | 男 | 2018-04-28 00:00:00 | 4821.00 | 13937356588 | D03 |
| 2001 | 关羽 | 男 | 2020-07-30 00:00:00 | 4850.00 | 13603731111 | D03 |
| 2002 | 刘蓓 | 女 | 2018-07-18 00:00:00 | 4250.00 | 13603732222 | D03 |
| 2003 | 张菲 | 女 | 2018-06-20 00:00:00 | 4980.00 | 13603733333 | D03 |
| 3001 | 林冲 | 男 | 2022-07-15 00:00:00 | 4000.00 | 13603735555 | D03 |
| 3002 | 宋江 | 男 | 2022-07-15 00:00:00 | 4000.00 | 13603736666 | D03 |
+------+--------------+--------+---------------------+---------+-------------+---------+
8 rows in set (0.00 sec)
(1)在 emp 表中添加列 dept_name
mysql> alter table emp add dept_name char(20);
Query OK, 0 rows affected (0.45 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> select * from emp;
+------+--------------+--------+---------------------+---------+-------------+---------+-----------+
| e_id | e_name | gender | jobtime | salary | phone | dept_id | dept_name |
+------+--------------+--------+---------------------+---------+-------------+---------+-----------+
| 1001 | 张涛 | 男 | 2018-06-25 00:00:00 | 4950.00 | 13637354888 | D01 | NULL |
| 1003 | 刘晶晶 | 女 | 2020-07-15 00:00:00 | 3918.00 | 13072664666 | D02 | NULL |
| 1005 | 欧阳鸿海 | 男 | 2018-04-28 00:00:00 | 4821.00 | 13937356588 | D03 | NULL |
| 2001 | 关羽 | 男 | 2020-07-30 00:00:00 | 4850.00 | 13603731111 | D03 | NULL |
| 2002 | 刘蓓 | 女 | 2018-07-18 00:00:00 | 4250.00 | 13603732222 | D03 | NULL |
| 2003 | 张菲 | 女 | 2018-06-20 00:00:00 | 4980.00 | 13603733333 | D03 | NULL |
| 3001 | 林冲 | 男 | 2022-07-15 00:00:00 | 4000.00 | 13603735555 | D03 | NULL |
| 3002 | 宋江 | 男 | 2022-07-15 00:00:00 | 4000.00 | 13603736666 | D03 | NULL |
+------+--------------+--------+---------------------+---------+-------------+---------+-----------+
8 rows in set (0.00 sec)
(2)用 dept 表中的列 dept_name 更新 emp 表的 dept_name 列
/* update emp e join dept d on e.dept_id = d.dept_id set e.dept_name = d.dept_name ; */
mysql> update emp e join dept d on e.dept_id = d.dept_id
-> set e.dept_name = d.dept_name
-> ;
Query OK, 8 rows affected (0.06 sec)
Rows matched: 8 Changed: 8 Warnings: 0
mysql> select * from emp;
+------+--------------+--------+---------------------+---------+-------------+---------+-----------+
| e_id | e_name | gender | jobtime | salary | phone | dept_id | dept_name |
+------+--------------+--------+---------------------+---------+-------------+---------+-----------+
| 1001 | 张涛 | 男 | 2018-06-25 00:00:00 | 4950.00 | 13637354888 | D01 | 财务部 |
| 1003 | 刘晶晶 | 女 | 2020-07-15 00:00:00 | 3918.00 | 13072664666 | D02 | 销售部 |
| 1005 | 欧阳鸿海 | 男 | 2018-04-28 00:00:00 | 4821.00 | 13937356588 | D03 | 研发部 |
| 2001 | 关羽 | 男 | 2020-07-30 00:00:00 | 4850.00 | 13603731111 | D03 | 研发部 |
| 2002 | 刘蓓 | 女 | 2018-07-18 00:00:00 | 4250.00 | 13603732222 | D03 | 研发部 |
| 2003 | 张菲 | 女 | 2018-06-20 00:00:00 | 4980.00 | 13603733333 | D03 | 研发部 |
| 3001 | 林冲 | 男 | 2022-07-15 00:00:00 | 4000.00 | 13603735555 | D03 | 研发部 |
| 3002 | 宋江 | 男 | 2022-07-15 00:00:00 | 4000.00 | 13603736666 | D03 | 研发部 |
+------+--------------+--------+---------------------+---------+-------------+---------+-----------+
8 rows in set (0.00 sec)
边栏推荐
- 【概率和计数】
- win11关闭Hyper-V
- Encapsulation, inheritance, polymorphism
- QT_ Embedded main interface addition and switching effect
- 网络安全知识图谱关键技术
- What are the three cache update strategies?
- 300000 prize pool is waiting for you to fight! Natural language processing (NLP) competition collection is coming
- 程序环境和预处理详解
- 在线沙箱集合
- cannot import name ‘import_string‘ from ‘werkzeug‘【bug解决】
猜你喜欢
2022/7/19
【概率和计数】
vivo官网APP全机型UI适配方案
ORA-39194: Table mode jobs require the tables to be comma separated.
What are the three cache update strategies?
STM32 learning ---spi
Vivo official website app full model UI adaptation scheme
Applet: page scrolling to a certain position navigation bar fixed effect
[model evaluation]
【故事证明和概率公理】
随机推荐
DNS域名解析
信息化加速发展背景下全球化的新特征
SQL injection attack risk
Warning FailedScheduling 8s default-scheduler 0/3 nodes are available: 1 Insufficient memory
[solve ax=b]
十分鐘生成影視級室內設計效果,紅星美凱龍設計雲如何昇級傳統家居行業
STM32学习---SPI
我的书《Oracle Database In-Memory架构与实践》出版了
Blurred photos, second high-definition big picture, flying propeller ppde takes you to reproduce the image restoration model cmfnet
Px4 uses P900 data transmission
3 种缓存更新策略是怎样的?
音视频入门——H.264编码(宏块+片+帧)浅析
实习打怪之路:nodejs中的npm全局安装和局部安装的意思,npm中的全局安装和局部安装的区别
Key technologies of network security knowledge map
Question 124 of Li Kou: maximum path sum in binary tree
uview表单,身份证,键盘,实时验证
EasyCode(逆向工程)插件使用
数据库系统原理与应用教程(023)—— MySQL 创建数据表的各种方法总结
Online sandbox collection
acwing 871. 约数之和