SQL92标准隔离级别有哪些

本篇内容主要讲解“SQL92标准隔离级别有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“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 (可串行化)×××

到此,相信大家对“SQL92标准隔离级别有哪些”有了更深的了解,不妨来实际操作一番吧!这里是蜗牛博客网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:niceseo99@gmail.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

评论

有免费节点资源,我们会通知你!加入纸飞机订阅群

×
天气预报查看日历分享网页手机扫码留言评论Telegram