视图,view
视图,是一张表,但是虚拟表!
是通过一条查询语句得到一个张虚拟表!
因此,认为视图,就是 select语句的结果!
语法:
create view 视图名字 AS 查询语句
创建完成后,就可以在视图内,完成查询工作了:
作用
--
可见,使用视图的功能之一,就是简化查询的业务逻辑!
注意:视图内是不保存真实数据的!视图内,只有一条形成视图的 select 语句而已!
因此,每次从视图查询时,都需要利用视图,再在真实的表内将数据查询到!
类似一个 from型子查询!
功能之二:隐藏真实 的表结构!
从而取得更大的兼容性
总结作用:1,简化逻辑,2,因此真实的结构(兼容性,限制用户的处理)
视图算法,执行方式
---------
场景
取得每个班级最高的学生信息
使用 from型子查询,可以,但是使用同样逻辑的视图不行!
视图:
视图其实一共有三种执行方式:
merge,合并
temptable,临时表
undefined,未定义,就是默认的,mysql自己决定算法(从 merge,和temptable内选择)!
典型的都是选择的merge的:因此上面的视图查询:
如何解决?
可以选择决定视图的算法!在创建视图时,指定。
ALGORITHM=temptable即可
algorithm
用到比较少!
事务,transaction
==============
一组 SQL 的集合,要不集体都执行成功,要不集体都失败,指的是,应该生成的影响退回到改组sql执行之前!
往往一个业务逻辑,是由多条语句组合完成!
语法
--
开启事务:start transaction可以简写成[begin]
记录下来,之后所执行的sql!(操作与结果)
提交:commit
如果所有的sql都执行成功,则提交。将sql的执行结果持久化到数据表内!
回滚:rollback
如果存在失败的sql,则需要回滚。将sql的执行结果,退回到事务开始之前
无论回滚还是提交,都会关闭该事务!(需要再次开启,才能使用)
事务,只针对当前的连接生效!
测试:
使用第一个链接A,开启事务后,执行一条update语句:
结果成功,数据已经变成修改之后!
此时没有提交通过其他连接B,查看,数据,是没有更改!
如果此时选择连接A 提交:
commit
在其他的连接B,查看时,数据也发生了变化:
回滚:
一旦回滚,则事务内的所有的sql影响都会被撤销!
rollback
事务的基本原理,autocommit
------------------
提交,就会将结果持久化,不提交不会!
如果不开启事务,执行一条sql,马上会持久化数据!
可见,普通的执行,是立即提交!
因为,默认的mysql对sql语句的执行是自动提交的!
开启事务其实就是,关闭了自动提交的功能!改成了commit执行手动提交!
因此,可以通过简单的对是否自动提交加以设置,可以完成开启事务的目的!
自动提交的特征是保存在服务的一个叫做autocommit的一个变量内的!
使用 set 变量名=变量值的形式就可以完成修改:
此时提交:
此时的回滚或者提交,不会关闭事务!需要手动设置为开启!
注意:事务类似于外键约束,只被innodb引擎支持!
事务的特点,ACID
----------
原子性,一致性,隔离型,持久性
原子性:事务是不可分割的。
一致性:保证数据在事务的执行周期内,是一致的!
隔离型:多个事务之间的干扰关系!隔离级别!
持久性:事务一旦被提交,就不可能在被回滚!
![](4D03E245F001ABFEDF19E06655DD213E.png)
上一篇: 23 数据的备份