简述ORACLE数据库事务隔离级别

事务隔离级别是指:两个事务之间的数据可见性

数据库为了提高效率,允许多个事务同时修改数据,这就带来了相应的问题:事务1修改的数据,对于事务2而言是否可见?

SQL规范中对于事务的隔离性提供了四个级别:

隔离级别 效果 说明
未提交读 事务1会读取到事务2未提交的数据 这是最低的一种隔离级别,会有脏数据发生:例如,事务2插入一条记录,事务1读取到了,然后事务2又做了回滚
提交读 事务1会读到事务2提交之后的数据 这是oracle默认的隔离级别,能够避免脏读,但有不可重复读的现象发生:例如事务1首先查询出用户张三的工资是1000元,事务2修改了张三的工资为2000并提交,这时事务1再做相同的查询会发现张三的工资与之前第一次查询结果不一致
可重复读 在一次事务中,其它事务的update对本事务不可见 oracle没有实现此隔离级别,要防止不可重复读,oracle采用悲观锁的方式保证一次事务内数据的一致性,即查询时加锁,事务结束才释放锁,这时别的事务无法进行修改
序列化读 在一次事务中,其它事务的insert对本事务不可见 幻读现象,例如事务1先查出来总记录14条,事务2新增了1条记录并提交,这时事务1再做查询会发现总记录为15条。前面提到的行级加锁的方式,可以防止不可重复读,但insert操作不受行锁影响,只有将事务隔离基本设置为序列化读,这样其它事务所做的影响对本事务都不可见,事务结束后才能看到更改

隔离级别越高,一次事务内数据的一致程度就越高,但整个数据库的并发性能就越低,因此选择合适的隔离级别很重要,一般而言,提交读对大部分场景已经足够。


results matching ""

    No results matching ""