1.事务
事务:是指一组相互依赖的操作行为,如银行交易,股票交易,网上购物。
2.数据库事务
一个或多个sql语句组成的工作单元,工作单元中的sql语句相互依赖。
![](https://img.haomeiwen.com/i7900193/8d53df4d75d91c6b.png)
3.事务的特性(ACID)
-
原子性(Atomicity)
一个事务里面所有包含的SQL语句是一个执行整体,不可分割,要么都做,要么都不做。 -
一致性(Consistency)
事务开始时,数据库中的数据是一致的,事务结束时,数据库的数据也应该是一致的。 -
隔离性(Isolation)
是指数据库允许多个并发事务同时对其中的数据进行读写和修改的能力,隔离性可以防止事务的并发执行时,由于他们的操作命令交叉执行而导致的数据不一致状态。 -
持久性 (Durability)
是指当事务结束后,它对数据库中的影响是永久的,即便系统遇到故障的情况下,数据也不会丢失。
4.数据异常
因为Oracle中支持多个事务并发执行,所以会出现下面的数据异常。
-
脏读
当一个事务读取另一个事务尚未提交的修改时,产生脏读。 -
不能重复读
在同一个事务中相同的查询多次进行,由于其他提交事务所做的修改或删除,每次返回不同的结果集,此时发生非重复读。 -
幻读
在同一事务中,相同的查询多次进行,由于其它事务提交的插入操作,每次返回的结果集都不同,此时发生幻像读。 -
更新丢失
当系统允许两个事务同时更新同一数据是,发生更新丢失。
5.事务的隔离级别
隔离级别定义了事务与事务之间的隔离程度。
4个事务的隔离级别:
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
Read uncommitted(读未提交) | 是 | 是 | 是 |
Read committed(读已提交) | 否 | 是 | 是 |
Repeatable read(可重复读) | 否 | 否 | 是 |
Serializable(串行读) | 否 | 否 | 否 |
默认的隔离级别是read committed
6.控制事务语句
-
set transaction
开始事务并设置关键特性
启动SQL*Plus、提交上一事务或撤销上一事务时,自动启动一个事务。- 设置事务特性
设置事务为只读事务
set transaction read only
设置事务为只写事务
set transaction read write
设置事务的隔离级别
set transaction isolation level read committed
- 设置事务特性
-
commit
提交事务;结束当前事务保存数据库改变并启动新事务 -
rollback
撤销事务;结束当前事务,撤销数据库改变并启动新事务。 -
savepoint
定义事务断点以实现部分撤销。
7.隐式事务处理
- 正常情况下
- 自动提交
DDL(数据查询语言)语句被发送
DCL(数据控制语言)语句被发送 - 自动回滚
系统发生异常
或者非正常退出
- 自动提交
网友评论