【MySQL】视图,事务、隔离级别

视图--虚表,不在数据库中存放数据,数据源于基本表。

为什么要使用视图

  • 简化复杂的sql操作,在编写查询后,可以方便的重用它而不必知道它的查询细节。
  • 重复使用该sql语句。
  • 使用表的组成部分而不是整个表。
  • 保护数据,可以给用户授予表的特定部分的访问权限而不是整个表。
  • 更改数据格式和表示。

性能问题
        因为视图不包含数据,所以每次使用视图时,都必须处理查询执行时所需的任一个检索。如果是多个联结和过滤创建了复杂的视图或者嵌套了视图,可能会出现性能下降。

 使用视图跟使用基本表没有什么区别。用视图分两步:1.从基本表中查到数据2.打印出来。


创建视图:

create view 视图名 列名

as 子查询

with check option

使用show full tables可以查看表的类型,区分视图与基本表:

 删除视图:

drop view 视图名;


事务

        事务就是一个操作序列,(一个整体)不可分隔,执行一半出错-回滚。

使用场景:银行转账A->B转账不可分割。

事务的四大特性ACID

        原子性atomicity、一致性consistency、隔离性isolation、持久性durability

原子性:一个整体

一致性:状态转换相同

隔离性:两个事务同时执行,互不影响--是否可见

持久性:数据到数据库中,即使数据库坏了,数据也可以恢复。


隔离级别

        隔离状态有四个级别,定义多个事务何时看到对方的修改。

1.未提交读READ UNCOMMITTED

        隔离性最低。事务中的修改即使没有提交,对其他事务也都可见。脏读

2.提交读READ COMMITTED

        大多数数据库的默认隔离级别。必须提交了事务,其他的事务才可见修改。

3.可重复读REPEATABLE READ

        其他事务提交了该事务未结束时都还看不见修改。确保同一事物多次读到的数据是一致的,可能出现幻读问题。

4.可串行化SERIALIZABLE 

        很少使用,可能会导致锁征用和大量超时问题。事务不可同时有多个,事务必须串行的发生。

查询当前会话的隔离级别:

SELECT @@SESSION.transaction_isolation;

默认查出来mysql是可重复读。

 查询系统的隔离级别

SELECT @@GLOBAL.transaction_isolation;

 幻读(可重复读中):

        一个事务在读取某个范围内的记录时,另一个事务在该范围修改了记录,但是前一个事务看不到修改的。

另一个事务插入语句会产生幻行。

设置隔离级别:

设置全局隔离级别:

set global transactin isolation level 级别;

设置会话隔离级别:

set session transaction isolation level 隔离级别;

事务的操作

开启事务:bedin; 或  strat transaction;

提交事务:commit;

回滚事务:rollback;相当于撤回

 因为事务是一个操作序列,开始事务后的操作可以rollback放弃,结束后相当于没有执行语句。

单独执行一条语句,不用begin和commit包围,系统自动将这个语句当一个事务。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曦樂~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值