- 爱易网页
-
数据库教程
- 事宜的隔离级别研究
日期:2014-05-16 浏览次数:20465 次
事务的隔离级别研究
今天无聊研究了一下以前没仔细看过的事务隔离级别,目前通用的包括大概是下面的图片的样子:
其中,oralce和其他很多数据库默认第二种级别,mysql默认使用第三种级别。
根据我的测试,select 语句在任何时候都不会阻塞,即一个事务不管进行何种的DML语句而不提交事务,另外一个事务都可以顺利执行select语句。
这是因为select语句并不需要获得 操作对象的锁,在oralce中,因为默认隔离级别是“提交读”,所以此时的select语句只能读取到“已提交后的数据”,也正是因为只要数据提交,就能被读取到,所以oralce存在 “不可重复读”。但是mysql的默认隔离级别是第三种,所以这个时候mysql不存在“不可重复读”,因为mysql的处理策略是:必须select语句所在的事务被提交后,才能读取到被其他事务更新的数据。不过根据我的测试有个很奇怪的问题:资料上说mysql存在 幻读,不过我的测试中发现不存在。
但是DML语句不同,如果一个事务进行了DML操作而不提交事务,那么其他事务的DML语句将不能得到执行(测试了oracle和 mysql5.x innodb引擎)。
这是因为DML语句的执行需要获得 操作对象(表、视图、行)的锁。
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。