我是靠谱客的博主 孝顺万宝路,最近开发中收集的这篇文章主要介绍总结SQL92标准的四种隔离级别,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

定义

  • Read uncommitted (读取未提交内容)

在 Read uncommitted 级别,事务中的修改,即使没有提交,对其他事务也都是可见的。事务可以读取未提交的数据,这也成为脏读(Dirty read)。这个级别会导致很多问题,从性能上说 Read uncommitted 不会比其他的级别好太多,但缺乏其他级别的好多好处,除非有非常必要的理由,在实际的应用中一般很少使用。

  • Read committed (读取提交内容)

大多数数据库系统的默认隔离级别都是 Read committed(但是 MySQL 不是)。Read committed 满足前面提到的隔离性的简单定义:一个事务开始时,只能看到已经提交的事务所做的修改。换句话说,一个事务从开始到提交之前,所做的任何修改对其他事务都是不可见的。这个级别有时候也叫做不可重复的(Nonrepeatable read),因为两次执行同样的查询,可能会得到不一样的结果。

  • Repeatable read (可重复读)

Repeatable read 解决了脏读问题。该级别保证了在同一个事务中多次读取同样的记录的结果是一致的。但是,理论上,可重复读隔离级别还是无法解决另一个幻读 (Phantom read)的问题。所谓幻读,指的是当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行(Phantom row)。InnoDB 和 XtraDB 存储引擎通过多版并发控制(MVCC,Multivesion Concurrency Control)解决了幻读问题。

Repeatable read 是 Mysql 默认的事务隔离级别,其中 InnoDB主 要通过使用 MVVC 获得高并发,使用一种被称为 next-key-locking 的策略来避免幻读。

  • Serializable (可串行化)

Serializable 是最高的隔离级别。它通过强制事务串行,避免了前面说的幻读问题。简单的来说,Serializable 会在读的每一行数据上都加上锁,所以可能导致大量的超时和锁征用问题。实际应用中也很少用到这个隔离级别,只有在非常需要确保数据的一致性而且可以接受没有并发的情况,才可考虑用该级别。

隔离级别

ANSI SQL92 P68-69

Level (隔离级别)Dirty read (脏读)Non-repeatable read (不可重复读)Phantom (幻读)
Read uncommitted (读取未提交内容)
Read committed (读取提交内容)×
Repeatable read (可重复读)××
Serializable (可串行化)×××

推荐学习:《mysql视频教程》

以上就是总结SQL92标准的四种隔离级别的详细内容,更多请关注靠谱客其它相关文章!

最后

以上就是孝顺万宝路为你收集整理的总结SQL92标准的四种隔离级别的全部内容,希望文章能够帮你解决总结SQL92标准的四种隔离级别所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(71)

评论列表共有 0 条评论

立即
投稿
返回
顶部