一、事务的四个特性(ACID)
-
原子性(Atomicity)
事务必须是原子工作单元,对其进行的数据修改,要么全都执行,要么全都不执行。以网上银行转账为例,要在A账户上增加1000元,同时要在B账户上减少1000元。要 么同时执行,要么都不执行更改,以确保整个事务是一个原子工作单元。
-
一致性(Consistency)
事务在完成时,必须使所有的数据都保持一致状态,即所有的数据都要发生更改,以保证数据的完整性。在银行转账时,A账户和B账户的数据都要发生更改,以保证数据的完整性。
-
隔离性(Isolation)
两个事务的执行是互不干扰的,一个事务不可能看到其他事务运行时、运行中间某一时刻的数据。比如银行转账操作时,如果有其他的会话也在进行转账,那么当前事务内不能看到其他事务在运行时或运行中间某一时刻的数据。
-
持久性(Durability)
一旦事务被提交之后,数据库的变化就会被永远保留下来,即使运行数据库软件的机器后来奔溃也是如此。银行转账一旦操作完成,数据就会被永久地保留下来了,即使数据库系统关闭也不会丢失数据。
二、事务隔离级别
-
并发带来的问题
1、 脏读:
对于两个事物 T1、T2,T1 读取了已经被 T2 更新但还没有被提交的字段。之后若 T2 回滚,T1读取的内容就是临时且无效的。
2、不可重复读:
对于两个事物 T1、T2, T1 读取了一个字段, 然后 T2 更新了该字段。 之后T1再次读取同一个字段,值就不同了.。
3、幻读:
对于两个事物 T1、 T2, T1 从一个表中读取了一个字段,然后 T2 在该表中插入了一些新的行。之后如果 T1 再次读取同一个表,就会多出几行。 -
隔离级别
oracle数据库支持READ COMMITTED 和 SERIALIZABLE这两种事务隔离级别。
默认系统事务隔离级别是READ COMMITTED,也就是读已提交。