一、视图
1.1 为什么使用视图?
安全——不希望用户看到整个数据库的结构,所以对不同权限的用户使用不同的视图隐藏必要数据;
方便——让用户更容易获得、理解数据;
1.2 什么是视图?
视图是一种查看数据库中一个或多个表中数据的方法,是保存在数据库中的select查询。
视图是一种虚拟表,它的行和列来自查询中引用的表,在执行时,它直接显示来自表中的数据。
1.3 视图常用来进行下面三种操作
- 筛选表中的行;
- 防止未经许可的用户访问敏感数据;
- 将多个物理数据表,抽象为一个逻辑数据表。
1.4 创建、查看视图
1)创建视图格式:
create view view_Name as <select子句>;
2)删除视图 (如果数据库中已经存在同名视图,先删除)
drop view if exists view_student;
3)查看视图
select * from view_student;
4)举例:
--创建视图
create view v_goods as select g.*,c.name as cates_name,b.name as brand_name from goods as g left join goods_cates as c on g.cates_id = c.id left join goods_brand as b on g.brand_id = b.id;
--查看视图
select * from v_goods;
-- 删除视图
drop view v_goods;
1.5 使用视图的注意事项
- 每个视图中可以使用多个表
- 与查询相似,一个视图可以嵌套另一个视图,但最好不要超过三层;
- 对视图数据进行添加、更新和删除操作直接影响表中的数据;
- 当数据来自多个表时,不允许添加和删除数据。
1.6、视图的作用
1)提高了重用性,就像一个函数
2)对数据库重构,却不影响数据库的运行
3)提高了安全性能,可以对不同的用户
4)让数据更加清晰
二、事务(Transaction)
2.1 什么是事务?
SQL中,事务是指将一系列数据操作捆绑成为一个整体进行统一管理。
如果一个事务执行成功,该事务中进行的所有数据均会提交,称为数据库中的永久组成部分;
如果事务执行时遇到错误切必须取消or回滚,则数据将全部恢复到操作前的状态,所有更改会被清除。
在数据库系统上执行并发操作时,事务是作为最小的控制单元来使用的,特别适用于多用户同时操作的数据库系统。
2.2 事务的ACID属性
原子性(Atomicity):一个事物必须被视为一个不可分割的最小单位,这个事物中的所有操作要么全部提交成功,要么全部回滚失败,对于一个事物来说,不可能只执行其中的一部分操作,这就是事物的原子性。
事务中的所有元素必须作为一个整体提交或回滚。
一致性(Consistency):数据库总是从一个一致性的状态转换到另一个一致性的状态。(在前面的例子中)
一致性确保了,及时在执行第三四语句之间系统崩溃,支票账户中也不会损失200元,因为事物最终没有提交,所以事物中所做的修改也不会被保存到数据库中。
事务完成时,数据必须处于一致状态。在事务进行中,可能会不一致。如转账操作中的金额总量。
隔离性(isolation):通常来说,一个事物所做的修改在最终提交以前,对其他事物是不可见得(在前面的例子中,当执行完第三条语句,最后一条语句还没有执行完成,此时另外一个账户汇总程序开始运行,则其账户的余额并没有被剪掉200块)
对数据进行修改的所有并发事务是彼此隔离的,即事务是独立的。
持久性(durability):一旦事物提交,则其所做的修改会永久保存到数据库中。(此时,及时系统崩溃,修改的数据也不会丢失)
指不管系统是否发生了故障,事务处理的结果都是永久的。就是说一旦事务被提交,事务的效果会被永久地保留在数据库中。
2.3 如何执行事务
MySQL的默认存储引擎InnoDB支持事务,InnoDB主要通过UNDO和REDO日志实现
UNDO日志:复制事务执行前的数据,用于在事务发生异常时回滚数据;
REDO日志:记录在事务执行中,每条对数据进行更新的操作,当事务提交时,内容会一起被刷新到磁盘。
2.4 事务的执行过程
MySQL的默认设置下,每句SQL语句就是一个事务,即执行SQL语句后自动提交。
(1)开始时,开启事务 or 关闭默认的自动提交:
begin;
/*或者*/
start transaction;
这两个语句显示地标记一个事务的起始点.
(2)提交事务
<