4-1) 数据的插入 ( insert语句 )
以下代码, 均在 MySQL 中运行.
- 在数据库shop中, 创建ProductIns表.
use shop
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));
2. 向表ProductIns中插入一行数据
小括号( )内分别为“列清单” “值清单”。原则上,执行一次insert语句会插入一行数据。
insert into ProductIns (product_id, product_name, product_type, sale_price, purchase_price, regist_date)
values ('0001', 'T恤衫', '衣服', 1000, 500, '2018-09-20');
3. 插入多行 insert (当省略列清单时,值清单会按着从左到右的顺序对应)
insert into ProductIns values ('0002', '打孔器', '办公用品', 500, 320, '2018-09-11'),
('0003', '运动T恤', '衣服', 4000, 2800, null), ('0004', '菜刀', '厨房用具', 3000, 2800, '2018-09-20');
4. 插入默认值 (初始值)
insert into ProductIns (product_id, product_name, product_type, sale_price, purchase_price, regist_date)
values ('0007', '擦菜板', '厨房用具', default, 790, '2018-07-29');
在创建表ProductIns, 已经给sale_price设置了默认值default 0. insert语句中的 default 参数,便会引用过来.
insert into ProductIns (product_id, product_name, product_type, purchase_price, regist_date)
values ('0007', '擦菜板', '厨房用具', 790, '2018-07-29');
该方法直接跳过了purchase_price项的赋值, 隐式默认值.
insert into ProductIns (product_id, product_name, product_type, sale_price, regist_date)
values ('0008', '圆珠笔', '办公用品', 100, '2018-10-01');
当purchase_price项没有默认值, 而省略给它赋值时, 系统会自动给予 NULL值.
5. 查看刚刚插入的数据行
select * from ProductIns where product_id = '0007';
insert...select 语句
- 创建一个表ProductCopy
create table ProductCopy
(product_id char(4) not null,
product_name varchar(100) not null,
product_type varchar(32) not null,
sale_price integer ,
purchase_price integer ,
regist_date date ,
primary key (product_id));
2. 将表ProductInt中的数据,复制过来
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 ProductInt;
结果ProductCopy表中也会插入完全相同的8行数据. 因此该语句可以在进行数据备份时使用.
其它 select语句与insert结合使用
4-2) 删除数据 ( delete语句 )
1. (drop talbe 语句) 删除整张表
drop table Product;
2. ( alter table 语句) 添加或减少列
alter table Product add column product_name_pinyin varchar(100);
alter table Product drop column product_name_pinyin;
3. ( delete 语句 ) 删除行数据,保留列表头
delete from Product;
与【1】【2】语句的区别是, delete语句的执行对象不是表,而是表中的数据行。
4. ( 搜索型delete ) 删除指定数据行
#删除销售单价(sale_price) >= 4000的数据
delete from Product
where sale_price >= 4000;
# 查看删除后的结果
select * from Product;
5. ( truncate 语句) 只能删除表中全部数据
#与delete相比,同样是删除全部行数据,truncate执行要快的多
truncate Product;
4-3) 数据的更新 ( update 语句 )
1. 更新表中某一列的全部数据
#将登记日期 (regist_date)全部更新为'2018-10-01'
update Product
set regist_date = '2018-10-01'
#查看更新后的结果
select * from Product order by product_id;
2. 搜索型 update
#将厨房用具类商品,销售单价更新为原来的10倍
update Product
set sale_price = sale_price * 10
where product_type = '厨房用具';
#确认更新内容
select * from Product order by product_id
3. Null 清空
#将商品编号为0008的数据登记日期更新为 NULL
update Product
set regist_date = NULL
where product_id = '0008';
#查看更新后的内容
select * from Product order by product_id;
4. 更新多列 ( 2种方式 )
#使用逗号,对列进行分隔排列
update Product
set sale_price = sale_price * 10,
purchase_price = purchase_price / 2
where product_type = '厨房用具';
#将列用 () 括起来的清单形式
update Product
set (sale_price, purchase_price) = (sale_price * 10, purchase_price / 2)
where product_type = '厨房用具';
#查看更新后的内容
select * from Product order by product_id;
4-4) 事务
1. 事务的定义:是需要在同一处理单元中执行的一系列更新处理的集合。
举例:作为一名程序员,某次会议后,领导说:“我们决定把运动T恤的销售单价下调100元,同时把T恤衫的销售单价上浮200元. 此时的“事务”就由2条更新处理所组成:
1) 将运动T恤的销售单价下调100元.
2) 将T恤衫的销售单价上浮200元.
1) 和 2)的操作,一定要作为同一处理单元执行。只完成其中任何一件,都不算完成事情。
2. 创建事务
start transaction;
--将运动T恤的销售单价下调100元
update Product
set sale_price = sale_price - 100
where product_name = '运动T恤'
--将T恤衫的销售单价上浮200元
update Product
set sale_price = sale_price + 200
where product_name = 'T恤衫';
commit ;
3. commit & rollback
4. ACID特性
DBMS的事务都遵循4种特性:Atomicity(原子性) Consistency(一致性) Isolation(隔离性) Durability(持久性)
1) 原子性。将事务内的语句看着一个整体,要么全部执行,要么全都不执行。
2) 一致性。
3) 隔离性。事物之间,互不干扰。
4) 持久性。事务结束后,DBMS能够将该时间点的数据状态保持。