SQL基础教程 Chapter 4


typora-copy-images-to: SQL basic

SQL基础教程 Chapter 4 数据更新

本章重点:本章将会给大家介绍DBMS 中用来更新表中数据的方法。数据的更新处理大体可以分为插入(INSERT)、删除(DELETE)和更新(UPDATE)三类。
本章将会对这三类更新方法进行详细介绍。此外,还会给大家介绍数据库中用
来管理数据更新的重要概念——事务。


4.1 数据的插入(INSERT 语句的使用方法)

  • 使用INSERT语句可以向表中插入数据(行)。原则上,INSERT语句每
    次执行一行数据的插入
  • 将列名和值用逗号隔开,分别括在()内,这种形式称为清单
  • 对表中所有列进行INSERT操作时可以省略表名后的列清单
  • 插入NULL时需要在VALUES子句的值清单中写入NULL
  • 可以为表中的列设定默认值(初始值),默认值可以通过在CREATE TABLE语句中为列设置DEFAULT约束来设定
  • 插入默认值可以通过两种方式实现,即在INSERT语句的VALUES子句
    中指定DEFAULT关键字(显式方法),或省略列清单(隐式方法)
  • 使用INSERT…SELECT可以从其他表中复制数据。

  • 建立一个productins的表
CREATE TABLE ProductIns
(product_id CHAR(4) NOT NULL,
product_name VARCHAR(100) NOT NULL,
product_type VARCHAR(32) NOT NULL,
sale_price INTEGER DEFAULT 0,
purchase_price INTEGER ,
regist_date DATE ,
PRIMARY KEY (product_id));
  • INSERT 语句的基本语法
INSERT INTO <表名> (列1, 列2, 列3, ……) VALUES (值1, 值2, 值3, ……);
# 插入数据:0001 T恤衫衣服 1000 500 2009-09-20
INSERT INTO ProductIns (product_id, product_name, product_type,sale_price, purchase_price, regist_date) VALUES ('0001', 'T恤衫','衣服', 1000, 500, '2009-09-20');
# 字符型和日期型数据需要用单‘’,括起来
# 将列名和值用逗号隔开
# 列清单和值清单的列数必须一致

# 多行INSERT
-- 多行INSERT (Oracle以外)
INSERT INTO ProductIns VALUES ('0002', '打孔器', '办公用品', 500, 320, '2009-09-11'),
('0003', '运动T恤', '衣服', 4000, 2800, NULL),
('0004', '菜刀', '厨房用具', 3000, 2800, '2009-09-20');

# 列清单的省略,对全列进行INSERT时,可省略列清单
# 插入NULL,NULL 不用加引号,想要插入null的列,一定不能设置not null的约束,否则会出错,导致插入失败
  • 插入默认值(显式和隐式)
# 显式
INSERT INTO ProductIns (product_id, product_name, product_type, sale_price, purchase_price, regist_date) VALUES ('0007', '擦菜板', '厨房用具', DEFAULT, 790, '2009-04-28');

# 隐式
INSERT INTO ProductIns (product_id, product_name, product_type, purchase_price, regist_date) VALUES ('0007', '擦菜板', '厨房用具', 790, '2009-04-28');

# 建议用显式的方式
  • 从其它表中复制数据
# INSERT...SELECT 语句,数据的备份

INSERT INTO ProductCopy (product_id, product_name, product_type, sale_price, purchase_price, regist_date)
SELECT product_id, product_name, product_type, sale_price, purchase_price, regist_date
FROM Product;

# 多种多样的select 语句
# 可以使用where 和 group by语句
CREATE TABLE ProductType
(product_type VARCHAR(32) NOT NULL,
sum_sale_price INTEGER ,
sum_purchase_price INTEGER ,
PRIMARY KEY (product_type));
# 建立product_type的表
insert producttype (product_type, sum_sale_price, sum_purchase_price)
select product_type ,sum(sale_price),sum(purchase_price)
from product
group by product_type;

在这里插入图片描述

在这里插入图片描述)

4.2 数据的删除(delete 语句的使用方法)

  • 如果想将整个表全部删除,可以使用DROP TABLE语句,如果只想删除
    表中全部数据,需使用DELETE语句
  • 如果想删除部分数据行,只需在WHERE子句中书写对象数据的条件即可
  • 通过WHERE子句指定删除对象的DELETE语句称为搜索型DELETE语句

  • DROP TABLE 语句和 DELETE语句
    • DROP TABLE 语句可以将表完全删除7
    • DELETE 语句会留下表(容器),而删除表中全部数据
# DELETE 语句的基本语法
DELETE FROM <表名>;
  • 指定对象的DELETE 语句(搜索型DELETE)
# 搜索型delete 语句的语法:
DELETE FROM <表名>
WHERE <条件>;

# 删除销售单价(sale_price)大于等于4000日元的数据
DELETE FROM Product
WHERE sale_price >= 4000;
# DELETE语句不能使用group by,having,order by三类子句

#TRUNCATE 语句
TRUNCATE <表名>;
# 不允许使用where语句,处理速度更快

4.3 数据的更新(UPDATE语句的使用方法)

  • 使用UPDATE语句可以更改(更新)表中的数据
  • 更新部分数据行时可以使用WHERE来指定更新对象的条件。通过WHERE
    子句指定更新对象的UPDATE语句称为搜索型UPDATE语句
  • UPDATE语句可以将列的值更新为NULL
  • 同时更新多列时,可以在UPDATE语句的SET子句中,使用逗号分隔更
    新对象的多个列

  • UPDATE语句的基本语法
# UPDATE 语句的用法:(属于DML语句)
UPDATE <表名>
SET <列名> = <表达式>;

# 将登记日期全部更新为“2009-10-10”
UPDATE Product
SET regist_date = '2009-10-10';
  • 指定条件的UPDATE语句(搜索型UPDATE)
# 更新部分数据行的搜索型UPDATE
UPDATE <表名>
SET <列名> = <表达式>
WHERE <条件>;

# 将商品种类为厨房用具的记录的销售单价更新为原来的10倍
UPDATE product
set sale_price = sale_price * 10
where product_type = '厨房用具';
  • 使用NULL进行更新,使用UPDATE 将列更新为NULL
# 将商品编号为0008的数据(圆珠笔)的登记日期更新为NULL
UPDATE product
set regist_date = null -- null 不需要加引号
where product_id = '0008';
# 只有未设置NOT NULL约束的列才可以清空为NULL
  • 多列更新
-- 使用逗号对列进行分隔排列
UPDATE Product
SET sale_price = sale_price * 10,
purchase_price = purchase_price / 2
WHERE product_type = '厨房用具';
OR
-- 将列用()括起来的清单形式
UPDATE Product
SET (sale_price, purchase_price) = (sale_price * 10, 
purchase_price / 2)
WHERE product_type = '厨房用具';

在这里插入图片描述

4.4 事务

  • 事务是需要在同一个处理单元中执行的一系列更新处理的集合。通过使用
    事务,可以对数据库中的数据更新处理的提交和取消进行管理
  • 事务处理的终止指令包括COMMIT( 提交处理)和ROLLBACK(取消处
    理)两种
  • DBMS的事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)四种特性。通常将这四种特性的首字母,结合起来,统称为ACID特性

  • 事务的概念

    事务是对表中数据进行更新的单位,简单来说,事务就是需要同意处理单元中执行的一系列更新处理的集合

  • 创建事务

# 创建事务的语法:
事务开始语句;
START TRANSACTION 为mysql的事务开始语句
DML语句①;
DML语句②;
DML语句③;
.. .
事务结束语句(COMMIT或者ROLLBACK);

START TRANSACTION;
-- 将运动T恤的销售单价降低1000日元
UPDATE Product
SET sale_price = sale_price - 1000
WHERE product_name = '运动T恤';
-- 将T恤衫的销售单价上浮1000日元
UPDATE Product
SET sale_price = sale_price + 1000
WHERE product_name = 'T恤衫';
COMMIT;
  • COMMIT 提交处理

在这里插入图片描述

  • ROLLBACK 取消处理

在这里插入图片描述

  • ACID 特性
    • 原子性,事务结束时,要么全部执行,要么全部不执行
    • 一致性,事务中包含的处理要满足数据库提前设置的约束,如主键约束,NOT NULL 约束,又称为完整性
    • 隔离性,不同事务之间互不干扰的特性,不会互相嵌套,未结束前,对于其它事务是不可见的
    • 持久性,时间点的数据状态会被保存,被执行记录称为日志

在这里插入图片描述

APPENDIX

法则4.1 原则上,执行一次INSERT语句会插入一行数据
法则4.2 省略INSERT语句中的列名,就会自动设定为该列的默认值(没有默认值时会设定为NULL)
法则4.3 INSERT语句的SELECT语句中,可以使用WHERE子句或者GROUP BY子句等任何SQL语法( 但使用ORDER BY子句并不会产生任何效果)
法则4.4 DELETE语句的删除对象并不是表或者列,而是记录(行)
法则4.5 可以通过WHERE子句指定对象条件来删除部分数
法则4.6 使用UPDATE语句可以将值清空为NULL(但只限于未设置NOT NULL约束的列)
法则4.7 事务是需要在同一个处理单元中执行的一系列更新处理的集合
法则4.8 虽然我们可以不清楚事务开始的时间点,但是在事务结束时一定要仔细进行确认
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值