事务的隔离级别

Posted 无敌大牛牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了事务的隔离级别相关的知识,希望对你有一定的参考价值。

事务隔离级别

查看事务的级别

select @@tcx_isolation

 

读未提交

/*
事务A开启以后,可以读取到事务B还没有提交的数据(即事务还没有提交就读到了)
这种隔离级别存在的问题就是:
    脏读现象!
    这种隔离级别是理论上的,大多数的数据库隔离级别都是二档起步
*/

读已提交

读的时候事务还没有提交,后来事务B提交了,再读的结果不一样

就是前后不一致

意思不能动态读取

/*
事务A开启以后,只能读取事务B提交之后的数据
这种隔离级别解决了脏读的现象
​
但这种隔离级别存在不可重复读
​
*/

不可重复读

/*
在事务开启之后,第一次读到的数据是3条,当前事务还没有结束,
可能第二次再读取的时候,读到的是4条,3不等于4;
这种就是不可重复读
这种隔离级别是比较真实的数据,每一次读到的数据都是绝对真实,
oracle数据库默认的隔离级别是:read commited
*/

可重复读

MySQL默认就是这个隔离级别

repeatable read

读到的永远都是事务开启时,第一次读取到的数据

/*
repeatable read  《提交之后也读不到,永远读取的都是刚开启事务时的数据》
​
可重复读:
事务A开启事务之后,不管是多久,每一次在事务A中读取的数据都是一致的,
即使B事务将数据已经修改,并且提交了,事务A读取到的数据还是没有发生改变;
​
存在的问题:
可能会出现幻读,可能每一次读取的数据都是幻象,不够真实
​
例如:造成9点开始了A事务,只要事务A不结束,到晚上9点,读到的数据还是那样,读到是假象不够真实
*/

序列化/串行化:serializable

/*
这是最高的隔离级别,效率最低,解决了事务隔离的所有问题
这种隔离级别表示事务排队,不能并发,即:一个事务操作的同时,其它事务不能操作,只能等待
*/

以上是关于事务的隔离级别的主要内容,如果未能解决你的问题,请参考以下文章

MySQL的默认事务隔离级别是?

如何更改mysql事务隔离级别

mysql 的事务隔离级别 及各个隔离级别应用场景,详细

Spring事务隔离级别:REQUIRES_NEW使用细节

数据库事务隔离级别 一般用哪个

MySQL-8事务与隔离级别IO