事务隔离级别:一个事务对数据库的修改与并行的另一个事务的隔离程度。
两个并发事务同时访问数据库表相同的行时,可能存在以下三个问题:
1、幻想读:事务T1读取一条指定where条件的语句,返回结果集。此时事务T2插入一行新记录,恰好满足T1的where条件。然后T1使用相同的条件再次查询,结果集中可以看到T2插入的记录,这条新纪录就是幻想。
2、不可重复读取:事务T1读取一行记录,紧接着事务T2修改了T1刚刚读取的记录,然后T1再次查询,发现与第一次读取的记录不同,这称为不可重复读。
3、脏读:事务T1更新了一行记录,还未提交所做的修改,这个T2读取了更新后的数据,然后T1执行回滚操作,取消刚才的修改,所以T2所读取的行就无效,也就是脏数据。
为了处理这些问题,SQL标准定义了以下几种事务隔离级别
READ UNCOMMITTED 幻想读、不可重复读和脏读都允许。
READ COMMITTED 允许幻想读、不可重复读,不允许脏读
REPEATABLE READ 允许幻想读,不允许不可重复读和脏读
SERIALIZABLE 幻想读、不可重复读和脏读都不允许
Oracle数据库支持READ COMMITTED 和SERIALIZABLE这两种事务隔离级别。所以Oracle不支持脏读
SQL标准所定义的默认事务隔离级别是SERIALIZABLE,但是Oracle 默认使用的是READ COMMITTED
设置隔离级别使用 SET TRANSACTION ISOLATION LEVEL [READ UNCOMMITTED|READ COMMITTED|REPEATABLE READ|SERIALIZABLE]
下面是oracle 设置SERIALIZABLE隔离级别一个示例:
左面是事务T1,右面是事务T2,因为T2级别为SERIALIZABLE,所以即使事务T1在提交了数据之后,事务T2还是看不到T1提交的数据,幻想读和不可重复读都不允许了。
那如何能查看到T1新增的记录呢? 上面T1和T2是并发执行,在T1执行insert的时候事务T2已经开始了,因为T2级别是SERIALIZABLE,所以T2所查询的数据集是T2事务开始前数据库的数据。即事务T1在事务T2开始之后的insert和update操作的影响都不会影响事务T2。现在重新开启一个事务T3 就可以看到T1新增的记录了。
当下列事件发生时,事务就开始了:
1、连接到数据库,并执行第一条DML语句
2、前一个事务结束后,又输入了另一条DML语句
相关推荐
介绍数据库事务的四种隔离级别,比较不同隔离级别的区别和影响
数据库事务和隔离级别
Oracle数据库课程设计医院系统数据库源代码。包含Java代码和SQL语句。源码中默认使用的数据库为运行的Oracle数据库 如需修改,在java源码/database.propertie中修改即可!Oracle数据库课程设计医院系统数据库源代码...
java连接oracle数据库驱动器java连接oracle数据库驱动器java连接oracle数据库驱动器java连接oracle数据库驱动器java连接oracle数据库驱动器java连接oracle数据库驱动器java连接oracle数据库驱动器java连接oracle...
JAVA 使用数据库连接池连接Oracle数据库,全代码,附加详细说明
oracle 事务隔离级别 事务不同引发的状况: 脏读(Dirty reads) 一个事务读取另一个事务尚未提交的修改时,产生脏读 很多数据库允许脏读以避免排它锁的竞争。 不可重复读(Nonrepeatable reads) 同一查询在同一事务中...
java连接oracle数据库jar包
JAVA 连接oracle数据库工程 JAVA oracle数据库 Myeclipse
使用java连接oracle数据库,使用软件为eclipse操作界面
Java Oracle 数据库开发指南.rar Java Oracle 数据库开发指南.rar Java Oracle 数据库开发指南.rar Java Oracle 数据库开发指南.rar Java Oracle 数据库开发指南.rar
java实现oracle数据库备份.pdf
LIB图书管理系统 java oracle数据库
java连接oracle数据库代码
基于java的开发源码-Oracle数据库工具 WARTS.zip 基于java的开发源码-Oracle数据库工具 WARTS.zip 基于java的开发源码-Oracle数据库工具 WARTS.zip 基于java的开发源码-Oracle数据库工具 WARTS.zip 基于java的开发...
这个就是连接oracle数据库的java类,你只要再下一个driver就可以运行!
在oracle数据据库中批量插入数据的java方法
json格式数据到入oracle数据库java源码
一个用java语言编写的简单的小程序,访问oracle数据库,
基于Java,Oracle数据库的信息管理系统,方便管理者统计员工信息,记录用户信息,提高了管理者工作效率,加强对酒店的信息管理
这是我们oracle数据库的实验代码,里面是用java链接并操作数据库的简单实例的代码。