事务
事务
是指作为单个逻辑工作单元执行的
一组相关操作
。这些操作
要求全部完成
或者全部不完成
。
使用事务是为了保证数据的安全有效
。
事务有一下四个特点:(ACID)
1、
原子性
(
Atomic
):事务中所有数据的修改,
要么全部执行,要么全部不执行
。
2、
一致性
(
Consistence
):事务完成时,要使所有
所有的数据都保持一致
的状态,
换言之:通过事务进行的所有数据修改,必须在所有相关的表中得到反映。
3、
隔离性
(
Isolation
):事务应该在另一个事务对数据的修改前或者修改后进行访问。
对于一个东西必须一个事务一个事
务进行
4、
持久性
(
Durability
):保证事务对数据库的修改是持久有效的,即使发生系统故障,
也不应该丢失。
当事务之间发生并发时有几个隔离级别
![](https://i-blog.csdnimg.cn/blog_migrate/b504b64b2e89c61f0e5f5e8a21ddfe4e.png)
Oracle 默认的隔离级别是 read committed
。
Oracle 支持上述四种隔离级别中的两种
:read committed
和
serializable
。除此之外,
Oralce 中还定义 Read only 和 Read write 隔离级别。
Read only
:事务中不能有任何修改数据库中数据的操作语句,是
Serializable
的一个子集。
Read write
:它是默认设置,该选项表示在事务中可以有访问语句、修改语句,但不经常使用。
丢失更新
:两个事务同时存储, 一个存储
100
, 一个存储
200
,最终可能至存储了
200
或者
100
,那另一个的更新就没成功,即结果不为预想的
300
脏读
:事务
T1
更新了一行数据,还没有提交所做的修改,
T2
读取更新后的数据,
T1
回滚,
T2
读取的数据无效,这种数据称为脏读数据。
不可重复读
:事务
T1
读取一行数据,
T2
修改了
T1
刚刚读取的记录,
T1
再次查询,
发现与第一次读取的记录不相同,称为不可重复读。
幻读
:事务
T1
读取一条带
WHERE
条件的语句,返回结果集,
T2
插入一条新纪录,
恰好也是
T1
的
WHERE
条件,
T1
再次查询,结果集中又看到
T2
的记录,新纪录就叫
做幻读。
1
、事务的开启
自动开启于 DML
之
insert delete update
2
、事务的结束
1) 成功
正常执行完成的 DDL
语句:
create
、
alter
、
drop
正常执行完 DCL
语句
GRANT
、
REVOKE
正常退出的 SQLPlus
或者
SQL Developer
等客户端
如果人工要使用隐式事务,SET AUTOCOMMIT ON (
只针对一个连接
)
手动提交 :使用 commit
2) 失败
rollback
,手动回滚
非法退出 意外的断电
rollback 只能对未提交的数据撤销,已经
Commit
的数据是无法撤销的,因为
commit
之后已经持久化到数据库中。