美文网首页
脏读 不可重复读 幻读

脏读 不可重复读 幻读

作者: 能取个帅气的昵称 | 来源:发表于2019-01-14 13:27 被阅读3次

    作者:小朋友

    链接:https://www.zhihu.com/question/47007926/answer/253406510

    来源:知乎

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    脏读:(同时操作都没提交的读取)

    脏读又称无效数据读出。一个事务读取另外一个事务还没有提交的数据叫脏读。

    例如:事务T1修改了一行数据,但是还没有提交,这时候事务T2读取了被事务T1修改后的数据,之后事务T1因为某种原因Rollback了,那么事务T2读取的数据就是脏的。

    解决办法:把数据库的事务隔离级别调整到READ_COMMITTED

    不可重复读:(同时操作,事务一分别读取事务二操作时和提交后的数据,读取的记录内容不一致)

    不可重复读是指在同一个事务内,两个相同的查询返回了不同的结果。

    例如:事务T1读取某一数据,事务T2读取并修改了该数据,T1为了对读取值进行检验而再次读取该数据,便得到了不同的结果。 解决办法:把数据库的事务隔离级别调整到REPEATABLE_READ

    幻读:(幻读是不可重复读的特殊场景,但是事务二的数据操作仅仅是插入和删除,不是修改数据,读取的记录数量前后不一致)

    例如:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入(注意时插入或者删除,不是修改))了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样。这就叫幻读。

    解决办法:把数据库的事务隔离级别调整到SERIALIZABLE_READ

    通过在写的时候加锁,可以解决脏读。

    通过在读的时候加锁,可以解决不可重复读。

    相关文章

      网友评论

          本文标题:脏读 不可重复读 幻读

          本文链接:https://www.haomeiwen.com/subject/rzvddqtx.html