oracle 的事务
概念及特性(摘自百度知道):
事务(Transaction)是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务,SQL Server能将逻辑相关的一组操作绑定在一起,以便服务器保持数据的完整性。
事务通常是以BEGIN TRANSACTION开始,以COMMIT或ROLLBACK结束。
COMMIT表示提交,即提交事务的所有操作。具体地说就是将事务中所有对数据库的更新写回到磁盘上的物理数据库中去,事务正常结束。
ROLLBACK表示回滚,即在事务运行的过程中发生了某种故障,事务不能继续进行,系统将事务中对数据库的所有以完成的操作全部撤消,滚回到事务开始的状态。
事务的特性(ACID特性)
A:原子性(Atomicity)
事务是数据库的逻辑工作单位,事务中包括的诸操作要么全做,要么全不做。
B:一致性(Consistency)
事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
C:隔离性(Isolation)
一个事务的执行不能被其他事务干扰。
D:持续性/永久性(Durability)
一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。
保存点:
模拟数据库管理员早上上班到中午休息,突然惊光一闪,做了一个错误操作想要反悔的过程。
图:
操作:
savepoint aa;
delete from emp where empid = 9999; //正常操作
savepoint bb;
delete from emp; //异常操作
rollback to bb; //回滚到异常操作之前
结论:事务支持多个保存点,可以在返回最近的保存点后另外再返回其他的保存点,但一旦
保存点返回,保存立即回收。事务提交之后,保存点失效。
隔离级别:
定义:各个事务之间的隔离程度
标准的隔离级别:
--------------------------------------------------------------------
名词说明:
脏读:一个事物读取到另外一个事物未提交的动作
不可重复读:在同一事务中多次查询,由于其他事务所做的修改和删除,导致每次
返回不同的结果集,此时发生非重复读
幻读:在同一事务中多次查询,由于其他食物所做的插入,导致每次
返回不同的结果集,此时发生幻读
oracle的隔离级别:
oracle的三种隔离级别:
1. read commited;
(1)这是oracle缺省的事务隔离级别
(2)保证不会出现脏读,但可能出现不可重复读和幻读
2. serializable
可以保证不会出现脏读、不可重复读、欢读
3. read only
可以保证不会出现脏读、不可重复读、欢读
------------------------------------------
serializable 与 read only的区别:
serializable:可以执行 dml语句
read only:只允许读取
如何在控制台设置事务的隔离级别
set transaction isolation level committed;(默认)
set transaction isolation level serializable;
set transaction read only;
如何在java程序中设置事务的隔离级别
Connection.setTransactionIsolation(Connection.隔离级别);