MySQL之视图、事务

原创
2017/02/04 13:27
阅读数 158

一、视图

视图: view, 是一种有结构(有行有列)但是没结果(结构中不真实存放数据)的虚拟表, 虚拟表的结构来源不是自己定义, 而是从对应的基表中产生(视图的数据来源).

1、创建视图

基本语法

create view 视图名字 as select语句; (as不可省略)

创建单表视图: 基表只有一个

创建多表视图: 基表来源至少两个

MySQL之视图、事务

2、查看视图

查看视图: 查看视图的结构

视图是一张虚拟表: 表, 表的所有查看方式都适用于视图: show tables [like]/desc 视图名字/show create table 视图名;

MySQL之视图、事务

视图一旦创建: 系统会在视图对应的数据库文件夹下创建一个对应的结构文件: frm文件

MySQL之视图、事务

3、使用视图

使用视图主要是为了查询: 将视图当做表一样查询即可.( 其实本质就是执行封装的select语句.)

MySQL之视图、事务

4、修改视图

视图本身不可修改, 但是视图的来源是可以修改的.

修改视图: 修改视图本身的来源语句(select语句)

alter view 视图名字 as 新的select语句;

MySQL之视图、事务

MySQL之视图、事务

5、删除视图

drop table/view 视图名字;

MySQL之视图、事务

6、视图意义

1. 节省SQL语句: 将一条复杂的查询语句使用视图进行保存: 以后可以直接对视图进行操作(你搜索了一个好的网站,收藏下,下次就不用搜索)

2. 数据安全: 视图操作是主要针对查询的, 如果对视图结构进行处理(删除), 不会影响基表数据(相对安全).

3. 视图往往是在大项目中使用, 而且是多系统使用: 可以对外提供有用的数据, 但是隐藏关键(无用)的数据(数据安全)

4. 视图可以对外提供友好型: 不同的视图提供不同的数据, 对外好像专门设计

5. 视图可以更好(容易)的进行权限控制

二、事务

场景:张三李四银行账户均有5000人民币,一日,张三给李四转账2000,但是张三刚打钱,银行系统故障。结果是:张三账户少了2000,但是李四账户还是5000。

学完事务就可以解决这个问题了

事务: transaction, 一系列要发生的连续的操作(注意存储引擎,InnoDB支持事务)

事务安全: 一种保护连续操作同时满足(实现)的一种机制

事务安全的意义: 保证数据操作的完整性

事务操作

事务操作分为两种: 自动事务(默认的), 手动事务

手动事务: 操作流程

1.开启事务: 告诉系统以下所有的操作(写)不要直接写入到数据表, 先存放到事务日志——start transaction;

MySQL之视图、事务

2.进行事务操作: 一系列操作

a)张三账户钱减少

b)李四账户钱增加

3.关闭事务: 选择性的将日志文件中操作的结果保存到数据表(同步)或者说直接清空事务日志(原来操作全部清空)

a) 提交事务: 同步数据表(操作成功): commit;

MySQL之视图、事务

MySQL之视图、事务

 

commit后结果

b) 回滚事务: 直接清空日志表(操作失败): rollback;

MySQL之视图、事务

rollback操作

事务原理

事务操作原理: 事务开启之后, 所有的操作都会临时保存到事务日志, 事务日志只有在得到commit命令才会同步到数据表,其他任何情况都会清空(rollback, 断电, 断开连接)

MySQL之视图、事务

commit之前

MySQL之视图、事务

commit之前并没有多9.99

MySQL之视图、事务

commit之后

回滚点

回滚点: 在某个成功的操作完成之后, 后续的操作有可能成功有可能失败, 但是不管成功还是失败,前面操作都已经成功: 可以在当前成功的位置, 设置一个点: 可以供后续失败操作返回到该位置, 而不是返回所有操作, 这个点称之为回滚点.

设置回滚点语法: savepoint 回滚点名字;

回到回滚点语法: rollback to 回滚点名字;

事务特性

事务有四大特性: ACID

A: Atomic原子性, 事务的整个操作是一个整体, 不可分割,要么全部成功,要么全部失败;

C: Consistency, 一致性, 事务操作的前后, 数据表中的数据没有变化

I: Isolation, 隔离性, 事务操作是相互隔离不受影响

D: Durability, 持久性, 数据一旦提交, 不可改变,永久的改变数据表数据

锁机制: innodb默认是行锁, 但是如果在事务操作的过程中, 没有使用到索引,那么系统会自动全表检索数据, 自动升级为表锁

行锁: 只有当前行被锁住, 别的用户不能操作

表锁: 整张表被锁住, 别的用户都不能操作

MySQL之视图、事务

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部