db2隔离级别-详解
JDBC隔离级别 |
数据库隔离级别 |
数据访问情况 |
TRANSACTION_READ_UNCOMMITTED(未提交的读)Uncommitted Read |
ur |
就是俗称“脏读”(dirty read),在没有提交数据时能够读到已经更新的数据 |
TRANSACTION_READ_COMMITTED (游标稳定性)Cursor Stability |
cs |
在一个事务中进行查询时,允许读取提交前的数据,数据提交后,当前查询就可以读取到数据。update数据时候并不锁住表 |
TRANSACTION_REPEATABLE_READ (读稳定性)Read Stability |
rs |
在一个事务中进行查询时,不允许读取其他事务update的数据,允许读取到其他事务提交的新增数据 |
TRANSACTION_SERIALIZABLE (可重复的读)Repeatable Read |
rr |
在一个事务中进行查询时,不允许任何对这个查询表的数据修改。 |
“可重复的读”隔离级别rr
当使用可重复的读隔离级别时,在单个事务执行期间锁定该事务引用的所有行。使用这种隔离级别时,同一事务多次发出的同一个 SELECT 语句将始终产生同一结果;丢失更新、脏读、不可重复的读、幻像都不会发生。
使用可重复的读隔离级别的事务可以多次检索同一行集,并可以对它们执行任意次操作,直到由提交或回滚操作终止事务;不允许其它事务执行插入、更新或删除操作,因为这些操作会在隔离事务存在期间影响正在被使用的行集。为了确保在“可重复的读”隔离级别下运行的事务所访问的数据不会受其它事务的负面影响,所以锁定了该隔离事务所引用的每个行 — 而不是仅锁定被实际检索和/或修改的那些行。因此,如果一个事务扫描了 1000 行但只检索 10 行,则所扫描的 1000 行(而不仅是被检索的 10 行)都会被锁定。
那么在现实环境中这个隔离级别是如何工作的呢?假定您拥有一家大型旅馆,并有一个网站,该网站按“先到先服务”的原则接受客户的房间预订。如果您的旅馆预订应用程序是在“可重复的读”隔离级别下运行的,当客户检索某个日期段内的所有可用房间列表时,您将无法更改那些房间在指定日期范围内的费用,而其他客户也将无法进行或取消将会更改该列表的预订,直到生成该列表的事务终止为止。(对于第一个客户的查询所指定范围之外的任何房间,您都可以更改房价,其他客户也都可以进行或取消房间预订。)
“读稳定性”隔离级别rs
当使用读稳定性隔离级别时,在单个事务执行期间,会锁定该事务所检索的所有行。当使用这种隔离级别时,直到隔离事务终止之前,其它事务不能更改隔离事务读取的所有行。此外,其它事务对其它行所作的更改,在提交之前对于运行在“读稳定性”隔离级别下的事务而言是不可见的。因此,当使用“读稳定性”隔离级别时,在同一事务中多次发出 SELECT 语句可能会产生不同的结果。丢失更新、脏读和不可重复的读都不会发生;但是,有可能出现幻像。
相关新闻>>
- 发表评论
-
- 最新评论 更多>>