事务隔离性

Posted on 2018-01-10 16:46  凯哥学堂  阅读(102)  评论(0编辑  收藏  举报

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。

事务隔离性:

Read Uncommitted(读取未提交内容)

比方说火车票售票,拿到的车票是第一张,拿到车票之后立马修改掉,改成锁定状态,就是不一定买

另外一个事务也说要查询出车票1张,这时候查询也是查询出前面座位一的票出来了,因为它那边的事务还没提交,所以它看到的是没有修改的数据,其实那条数据已经被修改了,如果你这边也发出个update修改的话就会卡住

image

如下图:

左边的事务查询出来一修改1号票,但是另外一边的事务查询1号票仍然是显示未售出,其实那张票已经被别锁定了

所以你只能看到提交后的数据,不能看到未提交的数据,因为你左边那个事务未提交,所以你看到的是没有提交前的数据,你已经把第一张票给锁定了,我应该拿第二张票给你,因为你第一张票不一定能出票成功,要别人放弃那张票你才能出票成功

image

如下图:所以就会出现一个读取未提交数据隔离事务,又称之为脏读模式,就是说你读取的数据不一定是有效的数据,输入以下这条语句就改成脏读模式了

set tx_isolation='READ-UNCOMMITTED';

改成脏读模式之后,这时候查询就不会查询出1号了

image

如下图,如果你锁定2号、它查出来的就是3号、如果你锁定3号、它查出来的就是4号

image

Select @@tx_isolation 查询当前事务隔离级别 默认是可重读级别

image

脏读模式有好有坏:

好处 售票可以及时看见状态

坏处 就是数据有可能会回滚

如下图:脏读的坏处就是,好比以下财务例题,财务这个事务修改金额为一万,员工那边查询有一万块钱,然后财务来一个rollback 然后你在查询就变成0了,这就是脏读不好的一点

image

Read Committed(读取提交内容)

Repeatable Read(可重读)

Serializable(可串行化)