您的位置:首页 > 数据库 > Oracle

ORACLE事务隔离性级别

2014-03-28 09:51 190 查看
        事务隔离性级别(Transaction Isolation Level)是一个事物对数据库的修改,与并行的另外一个事物的隔离程度.

        首先我们先了解试图访问表中相同行是可能会出现的问题.

       1、幻像读取(phantom read)

           事务1读取指定的where子句返回的结果集,事务2插入一条记录.而事务2插入的这条记录恰好满足事务1指定的where条件,且同时事务1再次执行查询时,就查询出了刚刚插入的这条记录,这个新行就被称为“幻像”.

       2、不可重复读取(nonrepeatabl read)

           事务T1刚读取了一条记录,紧接着事务T2修改了事务T1读取的那条记录,事务T1紧接着又读取了一次,这次发现与刚才读取的内容不同了, 这种现象称为“不可重复读取”.

       3、脏读(dirty read)

          事务T1更新了一行记录,但是并没有commit,事务T2读取了事务T1更新后的行,事务T1执行了回滚操作,撤销了刚才的修改,现在T2显示的数据已经不存在了,这是所读取的数据就被称为“脏数据".

       为了处理这些问题,数据库规定了事务隔离性级别。

            1、read uncommited:幻像读、不可重复读取、脏读都允许.

            2、read commited:允许幻像读、重复读取,不允许脏读.

            3、repeatable read:允许幻像读,不允许不可重复读取、脏读.

            4、serializable:幻像读、不可重复读取、脏读都不允许.

  注意:ORACLE数据库不支持read uncommited、repeatable read这两种事务隔离性级别.

语法格式如下:

           set   transaction isolation level {read uncommited | read commited | repeatable read|serializable | serializable}

 

示例:

           幻像读、不可重复读取、脏读都不允许:

           SQL>SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息