(一)什么是事务
事务:
事务是指作为单个逻辑工作单元执行的一组相关操作。
这些操作要求全部完成或者全部不完成。
使用事务的原因:保证数据的安全有效。
事务的四个特点:(
ACID
)
1
、原子性(
Atomic
):事务中所有数据的修改,要么全部执行,要么全部不执行。
2
、一致性(
Consistence
):事务完成时,要使所有所有的数据都保持一致的状态,换言之:通过事务进行的所有数据修改,必须在所有相关的表中得到反映。
3
、隔离性(
Isolation
):事务应该在另一个事务对数据的修改前或者修改后进行访问。
4
、持久性(
Durability
):保证事务对数据库的修改是持久有效的,即使发生系统故障,也不应该丢失。
(二)
相关概念
回滚:
RollBack
只能对未提交的数据撤销,已经
Commit
的数据是无法撤销的,因为
commit
之后已经持久化到数据库中。
脏读(
Dirty Read
):事务
T1
更新了一行数据,还没有提交所做的修改,
T2
读取更新后的数据,
T1
回滚,
T2
读取的数据无效,这种数据称为脏读数据。
不可重复读(
UNrepeatable Read
):事务
T1
读取一行数据,
T2
修改了
T1
刚刚读取的记录,
T1
再次查询,发现与第一次读取的记录不相同,称为不可重复读。
幻读(
Phantom Read
):事务
T1
读取一条带
WHERE
条件的语句,返回结果集,
T2
插入一条新纪录,恰好也是
T1
的
WHERE
条件,
T1
再次查询,结果集中又看到
T2
的记录,新纪录就叫做幻读。
(三)
隔离级别
NO_TRANSACTION
不支持事务
READ_UNCOMMITED
允许脏读、不可重复读、幻读
READ_COMMITED
允许不可重复读、幻读,不允许脏读
REPEATABLE
允许幻读,不允许脏读、不可重复读
SERIALIZABLE
脏读、不可重复读、幻读都不允许
Oracle
支持
SQL92
标准的
READ_COMMITED
、
SERIALIZABLE
,自身特有的
READ_ONLY