transaction isolation_level

一   查询数据库事务隔离级别:

      1.   MySQL 查询:    select @@tx_isolation;  默认级别:  REPEATABLE-READ  支持四种级别

      2.   Oracle 查询:     可以通过select flag from v$transaction(判断值)  默认级别:   read committed  只支两种级别

二   设置事务隔离级别:只允许[read committed  |  serializable]

      1.    alter session set ISOLATION_LEVEL = read committed    设置当前session隔离级别

      2.    SET TRANSACTION ISOLATION LEVEL READ COMMITTED; 设置当前事物的隔离级别

二  ANSI事务隔离性级别:

标准的隔离性级别由ANSI SQL标准定义,但是它们不是SQL数据库特有的。JTA也定义了完全相同的隔离性级别。隔离性级别的增加带来了更高成本以及严重的性能退化和可伸缩性: 

1.丢失更新(lost update):  一个事物因异常撤消会影响到另一个事物,只要数据库支持事物,就不会出现实种情况.

2.脏读(dirty read):当一个事务读取另一个事务尚未提交的修改时,就会产生脏读.

3.非重复读(nonrepeatabe read):同一查询在同一事务中多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。(A transaction rereads data it has previousy read and finds that another committed transaction has modified or deeted the data.  )

      4.幻读(phantom read):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,每次返回不同的结果集,此时发生幻像读。(A transaction reexecutes a query returning a set of rows that satisfies a search condition and finds that another committed transaction has inserted additiona rows that satisfy the condition.  ) (注:主要针对插入操作)

 

      ANSI/ISO SQ92标准定义了一些数据库操作的隔离级别:

  • 未提交读(read uncommitted)
  • 提交读(read committed)   Oracle默认
  • 重复读(repeatabe read)   类似select * from emp for update 功能查询时加了锁 MySQL默认
  • 序列化(seriaizabe)

    

  Dirty Read NonRepeatabe Read  Phantom Read 
Read uncommitted Possible Possible Possible
Read committed not possible Possible Possible
Repeatabe read not possible not possible Possible
Seriaizabe not possible not possible not possible

你可能感兴趣的:(oracle,sql,mysql)