事务隔离性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了事务隔离性相关的知识,希望对你有一定的参考价值。
声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。
事务隔离性:
Read Uncommitted(读取未提交内容)
比方说火车票售票,拿到的车票是第一张,拿到车票之后立马修改掉,改成锁定状态,就是不一定买
另外一个事务也说要查询出车票1张,这时候查询也是查询出前面座位一的票出来了,因为它那边的事务还没提交,所以它看到的是没有修改的数据,其实那条数据已经被修改了,如果你这边也发出个update修改的话就会卡住
如下图:
左边的事务查询出来一修改1号票,但是另外一边的事务查询1号票仍然是显示未售出,其实那张票已经被别锁定了
所以你只能看到提交后的数据,不能看到未提交的数据,因为你左边那个事务未提交,所以你看到的是没有提交前的数据,你已经把第一张票给锁定了,我应该拿第二张票给你,因为你第一张票不一定能出票成功,要别人放弃那张票你才能出票成功
如下图:所以就会出现一个读取未提交数据隔离事务,又称之为脏读模式,就是说你读取的数据不一定是有效的数据,输入以下这条语句就改成脏读模式了
set tx_isolation=’READ-UNCOMMITTED’;
改成脏读模式之后,这时候查询就不会查询出1号了
如下图,如果你锁定2号、它查出来的就是3号、如果你锁定3号、它查出来的就是4号
Select @@tx_isolation 查询当前事务隔离级别 默认是可重读级别
脏读模式有好有坏:
好处 售票可以及时看见状态
坏处 就是数据有可能会回滚
如下图:脏读的坏处就是,好比以下财务例题,财务这个事务修改金额为一万,员工那边查询有一万块钱,然后财务来一个rollback 然后你在查询就变成0了,这就是脏读不好的一点
Read Committed(读取提交内容)
Repeatable Read(可重读)
Serializable(可串行化)
以上是关于事务隔离性的主要内容,如果未能解决你的问题,请参考以下文章
MySQL 基础 事务 -- 事务简介事务操作事务四大特性(原子性一致性隔离性持久性)并发事务问题(不可重复读脏读幻读)事务隔离级别(解决并发事务问题)