Oracle事务
定义:
事务是指作为单个逻辑工作单元执行的一组相关操作。这些操作要求全部完成或者全部不完成。使用事务是为 了保证数据的安全有效。
事务的特点(ACID)
- **原子性(Atomic):**事务中所有数据的修改,要么 全部执行,要么全部不执行。
- **一致性(Consistence):**事务完成时,要使所有所 有的数据都保持一致的状态,换言之:通过事务进行 的所有数据修改,必须在所有相关的表中得到反映。
- **隔离性(Isolation):**事务应该在另一个事务对数据 的修改前或者修改后进行访问。
- **持久性(Durability):**保证事务对数据库的修改是 持久有效的,即使发生系统故障,也不应该丢失。
事务的隔离级别
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
Read uncommitted(读未提交) | 是 | 是 | 是 |
Read committed(读已提交) | 否 | 是 | 是 |
Repeatable read(可重复读) | 否 | 否 | 是 |
Serializable(窜行读) | 否 | 否 | 否 |
Oracle 默认的隔离级别是 read committed。
**丢失更新:**两个事务同时存储, 一个存储 100 , 一个 存储 200,最终可能至存储了 200 或者 100,那另一个的 更新就没成功,即结果不为预想的 300
**脏读:**事务 T1 更新了一行数据,还没有提交所做的修 改,T2 读取更新后的数据,T1回滚,T2 读取的数据无 效,这种数据称为脏读数据。
**不可重复读:**事务 T1 读取一行数据,T2 修改了 T1 刚刚 读取的记录,T1 再次查询,发现与第一次读取的记录不 相同,称为不可重复读。
**幻读:**事务 T1 读取一条带 WHERE 条件的语句,返回结 果集,T2 插入一条新纪录,恰好也是 T1 的 WHERE 条 件,T1 再次查询,结果集中又看到 T2 的记录,新纪录 就叫做幻读。
. 事务的结束
-
成功
正常执行完成的 DDL 语句:create、alter、drop
正常执行完 DCL 语句 GRANT、REVOKE
正常退出的 SQLPlus 或者 SQL Developer 等客户端 如果人工要使用隐式事务,SET AUTOCOMMIT ON (只针对一个连接) 手动提交 :使用 commit
-
失败
rollback ,手动回滚
非法退出 意外的断电
rollback 只能对未提交的数据撤销,已经 Commit 的数据 是无法撤销的,因为 commit 之后已经持久化到数据库 中。