- 爱易网页
 
                        - 
                            数据库教程
 
                        - 事宜的隔离级别研究 
 
                         
                    
                    
                    日期:2014-05-16  浏览次数:20587 次 
                    
                        
                         事务的隔离级别研究
    今天无聊研究了一下以前没仔细看过的事务隔离级别,目前通用的包括大概是下面的图片的样子:

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