事务:若干个指令的集合(DML)
事务的特点:要么一起成功,要么一起失败(原子操作)
commit/rollback
事务开始的标志:DML语句开始
事务结束的标志:
提交结束:1.显示提交 commit 2.隐式提交 执行DDL 3.正常退出(quit)
回滚结束:1.显示回滚rollback
事务4大特性(ACID) :原子性、一致性、隔离性、持久性。
原子性 (Atomicity):事务中的全部操作在数据库中是不可分割的,要么全部完成,要么均不执行。
一致性 (Consistency):几个并行执行的事务,其执行结果必须与按某一顺序串行执行的结果相一致。
隔离性 (Isolation):事务的执行不受其他事务的干扰,当数据库被多个客户端并发访问时,隔离它们的操 作,防止出现: 脏读、幻读、不可重复读。
持久性 (Durability):对于任意已提交事务,系统必须保证该事务对数据库的改变不被丢失,即使数据库出 现故障。
保存点:可以防止错误操作影响整个事务,方便进行事务控制。
savepoint主要用于在事务上下文中声明一个中间标记,将一个长事务分隔为多个较小的部分,和我们编写文档时,习惯性保存一下一样,都是为了防止出错和丢失。如果保存点设置名称重复,则会删除之前的那个保存点。一但commit之后,savepoint将失效。
事务的隔离级别:
先介绍3个概念
脏读:对于两个事物 T1, T2, T1 读取了已经被 T2 更新但还没有被提交的字段. 之后, 若 T2 回滚, T1读取的内容就是临时且无效的.
不可重复读:对于两个事物 T1, T2, T1 读取了一个字段, 然后 T2 更新了该字段. 之后, T1再次读取同一个字段, 值就不同了.
幻读:对于两个事物 T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插入了一些新的行. 之后, 如果 T1 再次读取同一个表, 就会多出几行.
事务的隔离性:数据库系统必须具有隔离并发运行各个事务的能力,是他们之间不会相互影响,避免发生各种并发问题。
SQL99定义了4种隔离级别:
1. Read Uncommitted 读未提交数据。
2. Read Commited 读已提交数据。
3. Repeatable Read 可重复读。
4. Serializable 序列化、串行化。
Oracle支持的隔离级别: Read Commited(默认)和 Serializable,以及Oracle自定义的Read Only三种。
Read Only:由于大多数情况下,在事务操作的过程中,不希望别人也来操作,但是如果将别人的隔离级别设置为Serializable(串行),但是单线程会导致数据库的性能太差。是应该允许别人来进行read操作的。