数据库隔离 脏读 幻读与不可重复读

Posted chenhao0302

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库隔离 脏读 幻读与不可重复读相关的知识,希望对你有一定的参考价值。

一、隔离级别与现象

数据库隔离有4个级别

read uncomitted ,未授权读取

read committed ,授权读取

repeatable read , 可重复读

serializable ,串行化

 

可能产生的不一致的现象有3种

脏读

不可重复读

幻读

 

二、3种现象

  脏读,就是读了脏数据;另一个事务修改了数据但未提交,我们读到了这个未提交的数据即脏数据,这种现象就是脏读;

举个栗子,balance字段值为100,另一个事务修改为200,未提交的时候我们读到了200,接着那个事务回滚了,实际值应该是100,但我们读的是200;

 

  不可重复读,就是对于一个数据,我重复读的时候它的值发生了改变;即两次读取之间被另一个事务进行了修改;

再举个栗子,我读到balance字段值为100,我做了判断(比如是否大于0),然后我再次读的时候它变成了200; 对于100这个值我没有重复读到,即发生了不可重复读;

 

  幻读,就是再次读取时发现了新的记录或少了记录,以为出现了幻觉;

最后一颗栗子,我读数据的时候没有balance字段,我要新增balance为0时,提示我存在这个字段了;我第二次读的时候 多了这条记录,我以为第一次读出现了幻觉;

大多数场景是我第一次读完后(可能是修改了某条数据后再读的),锁定了我读的那一条数据,但另一个事务改了这张表的其它数据,我第二次读的时候以为第一次读出现了幻觉(可能第一次修改了全表,另一个事务只改了一条数据,我以为我没成功修改那条数据);

 

三、隔离级别

 

  脏读 不可重复读 幻读
Read uncommitted 可能发生  可能发生 可能发生
Read committed   可能发生 可能发生
Repeatable read     可能发生
Repeatable read      

以上是关于数据库隔离 脏读 幻读与不可重复读的主要内容,如果未能解决你的问题,请参考以下文章

一文带你理解脏读,幻读,不可重复读与mysql的锁,事务隔离机制

一文带你理解脏读,幻读,不可重复读与mysql的锁,事务隔离机制

事务隔离级别中可重复读与幻读

事务隔离级别中可重复读与幻读的恩恩怨怨

脏读,不可重复读,幻读及事务隔离等级

数据库事务隔离级别-- 脏读幻读不可重复读(清晰解释)