1、提交
2、回滚
3、acid特性
二、视图
1、创建视图
2、删除视图
3、更新视图
4、使用视图
三、子查询
1、 使用子查询
2、 标量子查询
3、 关联子查询
一、事务在 rdbms 中,事务是对表中数据进行更新的单位。简单来讲,事务就是需要在同一个处理单元中执行的一系列更新处理的集合。
事务开始语句start transaction; dml语句①; dml语句②; dml语句③; . . . 事务结束语句(commit或者rollback);
1、提交commit 是提交事务包含的全部更新处理的结束指令,相当于文件处理中的覆盖保存。一旦提交,就无法恢复到事务开始前的状态了。
2、回滚rollback 是取消事务包含的全部更新处理的结束指令,相当于文件处理中的放弃保存。一旦回滚,数据库就会恢复到事务开始之前的状态。
3、acid特性dbms 的事务都遵循四种特性,将这四种特性的首字母结合起来统称为 acid 特性。
原子性(atomicity) 原子性是指在事务结束时,其中所包含的更新处理要么全部执行,要么完全不执行。
一致性(consistency) 一致性指的是事务中包含的处理要满足数据库提前设置的约束,如主键约束或者 not null 约束等。例如,设置了 not null 约束的列是不能更新为 null 的,试图插入违反主键约束的记录就会出错,无法执行。对事务来说,这些不合法的 sql 会被回滚。
隔离性(isolation) 隔离性指的是保证不同事务之间互不干扰的特性。该特性保证了事务之间不会互相嵌套。此外,在某个事务中进行的更改,在该事务结束之前,对其他事务而言是不可见的。因此,即使某个事务向表中添加了记录,在没有提交之前,其他事务也是看不到新添加的记录的。
持久性(durability) 持久性指的是在事务(不论是提交还是回滚)结束后,dbms 能够保证该时间点的数据状态会被保存的特性。即使由于系统故障导致数据丢失,数据库也一定能通过某种手段进行恢复。
二、视图视图和表的本质不同在于“是否保存了实际的数据”。
表中存储的是实际数据,而视图中保存的是从表中取出数据所使用的select语句。
我们应该将经常使用的select语句做成视图。
1、创建视图--格式:create view 视图名称(<视图列名1>, <视图列名2>, ……) as <select语句> create view v1 (product_name, name_cnt) as select product_name, count(*) from 表名/视图名 group by product_name
注意:
避免在视图的基础上创建视图。对多数 dbms 来说,多重视图会降低 sql 的性能。
定义视图时不能使用 order by子句
2、删除视图--格式:drop view 视图名称 drop view v1
3、更新视图-- 格式:alter view 视图名称 as <select语句> -- 格式:insert into 视图名称 values(...)
注意:
视图和表需要同时进行更新,因此通过汇总(聚合结合连表)得到的视图无法进行更新insert。
记住,对视图的更新归根结底是对视图所对应的表进行更新。
4、使用视图使用视图时,将其当作表进行操作即可,由于视图是虚拟表,所以无法使用其对真实表进行创建、更新和删除操作,仅能做查询用。
select * from v1
三、子查询1、 使用子查询子查询就是一次性视图(select语句)。与视图不同,子查询在select语句执行完毕之后就会消失。
-- 根据商品种类统计商品数量的视图 create view productsum (product_type, cnt_product) as select product_type, count(*) from product group by product_type; -- 确认创建好的视图 select product_type, cnt_product from productsum; --子查询 select product_type, cnt_product from (select product_type, count(*) from product group by product_type)as productsum;
2、 标量子查询标量子查询则有一个特殊的限制,那就是必须而且只能返回 1 行 1 列的结果,也就是返回表中某一行的某一列的值。
select product_id, product_name, sale_price from product where sale_price > (select avg(sale_price) from product);
3、 关联子查询在细分的组内进行比较时,需要使用关联子查询。
--子查询中添加的 where 子句的条件 --该条件的意思是,在同一商品种类中对各商品的销售单价和平均单价进行比较。 select product_id, product_name, sale_price from product as p1 where sale_price > (select avg(sale_price) from product as p2 where p1.product_type = p2.product_type group by product_type);
以上就是mysql悬系之事务与视图介绍的详细内容。
