数据的更新
# 120.数据的更新
使用 INSERT 语句向表中插入数据之后,有时却想要再更改数据,例如“将商品销售单价登记错了”等的时候。这时并不需要把数据删除之后再重新插入,使用 UPDATE 语句 就可以改变表中的数据了。
和 INSERT 语句、DELETE 语句一样,UPDATE 语句也属于 DML 语句。
# 基本语法
UPDATE <表名>
SET <列名> = <表达式>;
1
2
2
例如,把 regist_date
列(登记日期)的所有数据统一更新为“2009-10-10”:
UPDATE Product
SET regist_date = '2009-10-10';
--结果:
mysql> SELECT * FROM Product;
+------------+--------------+--------------+------------+----------------+-------------+
| product_id | product_name | product_type | sale_price | purchase_price | regist_date |
+------------+--------------+--------------+------------+----------------+-------------+
| 0001 | T恤衫 | 衣服 | 1000 | 500 | 2009-10-10 |
| 0002 | 打孔器 | 办公用品 | 500 | 320 | 2009-10-10 |
| 0003 | 运动T恤 | 衣服 | 4000 | 2800 | 2009-10-10 |
| 0004 | 菜刀 | 厨房用具 | 3000 | 2800 | 2009-10-10 |
| 0005 | 高压锅 | 厨房用具 | 6800 | 5000 | 2009-10-10 |
| 0006 | 叉子 | 厨房用具 | 500 | NULL | 2009-10-10 |
| 0007 | 擦菜板 | 厨房用具 | 880 | 790 | 2009-10-10 |
| 0008 | 圆珠笔 | 办公用品 | 100 | NULL | 2009-10-10 |
+------------+--------------+--------------+------------+----------------+-------------+
8 rows in set (0.00 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
此时,连登记日期原本为 NULL 的数据行(运动 T 恤)的值也更新为 2009-10-10 了。
# 为update指定条件
更新数据时也可以像 DELETE 语句那样使用 WHERE 子句,语法:
UPDATE <表名>
SET <列名> = <表达式>
WHERE <条件>;
1
2
3
2
3
例如,将商品种类(product_type )为厨房用具的记录的销售单价(sale_price )更新为原来的 10 倍:
UPDATE Product
SET sale_price = sale_price * 10
WHERE product_type = '厨房用具';
1
2
3
2
3
# update为null
使用 UPDATE 也可以将列更新为 NULL (俗称为 NULL 清空 ),只需要将赋值表达式右边的值直接写为 NULL 即可。例如:
UPDATE Product
SET regist_date = NULL
WHERE product_id = '0008';
1
2
3
2
3
注意:只有未设置 NOT NULL 约束和主键约束的列才可以清空为 NULL 。
# 多列更新
如果我们想将销售单价(sale_price
)更新为原来的 10 倍,同时将进货单价(purchase_price
)更新为原来的一半,那么我们可以写两个SQL:
-- 一条UPDATE语句只更新一列
UPDATE Product
SET sale_price = sale_price * 10
WHERE product_type = '厨房用具';
UPDATE Product
SET purchase_price = purchase_price / 2
WHERE product_type = '厨房用具';
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
其实,我们可以将其合并为一条 UPDATE
语句来处理。合并的方法有两种。
第一种:用逗号分隔
-- 使用逗号对列进行分隔排列
UPDATE Product
SET sale_price = sale_price * 10,
purchase_price = purchase_price / 2
WHERE product_type = '厨房用具';
1
2
3
4
5
2
3
4
5
第二种:用括号
-- 将列用()括起来的清单形式
UPDATE Product
SET (sale_price, purchase_price) = (sale_price * 10, purchase_price / 2)
WHERE product_type = '厨房用具';
1
2
3
4
2
3
4
需要注意的是,第一种方法在所有的 DBMS 中都可以使用。但第二种在某些 DBMS 中是无法使用的。因此,实际应用中通常都会使用第一种方法。
(完)
上次更新: 2024/1/23 16:20:41