一、视图
视图: view, 是一种有结构(有行有列)但是没结果(结构中不真实存放数据)的虚拟表, 虚拟表的结构来源不是自己定义, 而是从对应的基表中产生(视图的数据来源).
1、创建视图
基本语法
create view 视图名字 as select语句; (as不可省略)
创建单表视图: 基表只有一个
创建多表视图: 基表来源至少两个
2、查看视图
查看视图: 查看视图的结构
视图是一张虚拟表: 表, 表的所有查看方式都适用于视图: show tables [like]/desc 视图名字/show create table 视图名;
视图一旦创建: 系统会在视图对应的数据库文件夹下创建一个对应的结构文件: frm文件
3、使用视图
使用视图主要是为了查询: 将视图当做表一样查询即可.( 其实本质就是执行封装的select语句.)
4、修改视图
视图本身不可修改, 但是视图的来源是可以修改的.
修改视图: 修改视图本身的来源语句(select语句)
alter view 视图名字 as 新的select语句;
5、删除视图
drop table/view 视图名字;
6、视图意义
1. 节省SQL语句: 将一条复杂的查询语句使用视图进行保存: 以后可以直接对视图进行操作(你搜索了一个好的网站,收藏下,下次就不用搜索)
2. 数据安全: 视图操作是主要针对查询的, 如果对视图结构进行处理(删除), 不会影响基表数据(相对安全).
3. 视图往往是在大项目中使用, 而且是多系统使用: 可以对外提供有用的数据, 但是隐藏关键(无用)的数据(数据安全)
4. 视图可以对外提供友好型: 不同的视图提供不同的数据, 对外好像专门设计
5. 视图可以更好(容易)的进行权限控制
二、事务
场景:张三李四银行账户均有5000人民币,一日,张三给李四转账2000,但是张三刚打钱,银行系统故障。结果是:张三账户少了2000,但是李四账户还是5000。
学完事务就可以解决这个问题了
事务: transaction, 一系列要发生的连续的操作(注意存储引擎,InnoDB支持事务)
事务安全: 一种保护连续操作同时满足(实现)的一种机制
事务安全的意义: 保证数据操作的完整性
事务操作
事务操作分为两种: 自动事务(默认的), 手动事务
手动事务: 操作流程
1.开启事务: 告诉系统以下所有的操作(写)不要直接写入到数据表, 先存放到事务日志——start transaction;
2.进行事务操作: 一系列操作
a)张三账户钱减少
b)李四账户钱增加
3.关闭事务: 选择性的将日志文件中操作的结果保存到数据表(同步)或者说直接清空事务日志(原来操作全部清空)
a) 提交事务: 同步数据表(操作成功): commit;
commit后结果
b) 回滚事务: 直接清空日志表(操作失败): rollback;
rollback操作
事务原理
事务操作原理: 事务开启之后, 所有的操作都会临时保存到事务日志, 事务日志只有在得到commit命令才会同步到数据表,其他任何情况都会清空(rollback, 断电, 断开连接)
commit之前
commit之前并没有多9.99
commit之后
回滚点
回滚点: 在某个成功的操作完成之后, 后续的操作有可能成功有可能失败, 但是不管成功还是失败,前面操作都已经成功: 可以在当前成功的位置, 设置一个点: 可以供后续失败操作返回到该位置, 而不是返回所有操作, 这个点称之为回滚点.
设置回滚点语法: savepoint 回滚点名字;
回到回滚点语法: rollback to 回滚点名字;
事务特性
事务有四大特性: ACID
A: Atomic原子性, 事务的整个操作是一个整体, 不可分割,要么全部成功,要么全部失败;
C: Consistency, 一致性, 事务操作的前后, 数据表中的数据没有变化
I: Isolation, 隔离性, 事务操作是相互隔离不受影响
D: Durability, 持久性, 数据一旦提交, 不可改变,永久的改变数据表数据
锁机制: innodb默认是行锁, 但是如果在事务操作的过程中, 没有使用到索引,那么系统会自动全表检索数据, 自动升级为表锁
行锁: 只有当前行被锁住, 别的用户不能操作
表锁: 整张表被锁住, 别的用户都不能操作