Oracle事务
来源:互联网 发布:软件兼容性是什么意思 编辑:程序博客网 时间:2024/05/17 01:59
一、事务定义:
事务是有一系列操作序列构成的程序执行单元,这些操作要么都做,要么都不做,是一个不可分割的工作单元。例如:
银行转帐:事务T从A帐号转帐50元到B帐号。(其中Read(X):从数据库传送数据项X到事务的工作区,Write(X):从事务的工作区中将数据项X写入到数据库)
Read(A)
A=A-50;
Write(A);
Read(B);
B=B+50;
Write(B);
二、SQL中事务的定义:
事务以Begin transaction开始,以Commit transaction或Rollback transaction结束。
Commit transaction表示提交,事务正常结束。
Rollback transaction表示事务非正常结束,撤销事务已做的操作,回滚到事务开始时状态。
CommitWork(Rollback work)后不跟事务名称。
三、事务特性(ACID)
原子性:事务中包含的所有操作要么都做,要么都不做,原子性由数据库中的恢复机制实现的。
一致性:事务的隔离执行必须保证数据库的一致性,事务开始前,数据库处于一致性的状态,,事务结束后,数据库必须仍然处于一致性的状态。数据库的一致性状态由用户来负责的,也是由数据库的恢复机制和并发控制机制实现的。
隔离性:系统必须保证事务不受其他并发执行事务的影响。隔离性通过并发控制机制实现的。
永久性:一个事务一旦提交后,它对数据库的影响必须是永久的。系统发生故障不能改变事务的持久性。持久性通过恢复机制实现的。
四、事务生命周期图
五、事务执行模式:
显示事务:以Begin Transaction开始,以Commit或Rollback结束。
隐含事务:事务自动开始,知道遇到Commit或者Rollback对结束。语法:SET IMPLICIT_TRANSACTIONS ON
自动事务:每个事务操作语句作为一个事务。Update Table Set Score=Score+101
六、事务模型:
平面事务:一层结构Begin Transaction Commit,缺点是不能部分回滚。
嵌套事务:内部事务的提交并不释放资源或使其修改成永久修改,只有在提交了外部事务,数据的修改才具有永久性,而且资源才会释放。
保存点:批量工作可以设置一个保存点,一旦碰到意外的情况,可以回滚到最近的保存点,下次启动就可以在这个保存点接着往下执行,可以最大限制保存已经完成的工作。
分布式事务:牵涉到网络上不同的计算机节点的数据操作。
七、事务调度:
事务的执行顺序成为一个调度,表示事务的指令在系统中执行的时间顺序。
一组事务的调度必须保证:1.包含了所有事务的操作指令2.一个事务中指令的顺序必须保持不变。
并行VS串行:
基本比较:并行事务可能会破坏数据库的一致性,串行事务效率低。
并行的优点:一个事务由不同的步骤组成,所涉及的系统资源也不同,这些步骤可以并行执行,以提高系统的吞吐量。(目前的数据库都是采用并行的调度)。
八、事务隔离性级别:
当用户对数据库并发访问时,为了确保事务的完整性和数据库的一致性,需要使用锁定,这是实现数据库并发控制的主要手段,锁定可以防止用户读取正在由其他用户更改的数据,并可以防止多个用户同时更改相同数据。如果不使用锁定,则数据库中的数据可能在逻辑上不正确,并且对数据库的查询可能会产生意想不到的结果,具体的来说,锁可以防止一下情况:
丢失修改:两个事务T1和T2读入同一数据并修改,T1提交的结果破坏了T2提交的结果,导致T1的修改丢失。
脏读:事务T1修改某一个数据,并将其写回,事务T2读取同一数据后,T2由于某种原因被撤销,这是T1已经修改的数据恢复原值,T2读到的数据与数据库中的数据不一致,则T2读到的数据就是脏数据。
不可重复读:事务T2读取某一个数据后,事务T1对其做了修改,当T2再次读取该数据时候,得到的与前次不同的值。
幻想读:事务T2按一定条件读取了某些数据后,事务T1插入了一些满足这些条件的数据,当T2再次按相同条件读取数据时候,发现多了一些记录。
SQL中隔离性级别的定义:
Serializable:一个调度的执行必须等价于一个串行调度的结果。
Repeatable read:只允许读取已提交的记录,并要求一个事务对同一记录的两次读取之间,其他的事务不能对该记录进行更新。
Read committed:只允许读取已经提交的记录,但不要求重复读。
Read uncommitted:允许读取未提交的记录。
级别从高到低,发生数据不一致的几率低,但是封锁的强度越大,导致系统并发度越小。
不同的隔离性的级别下发生不一致的现象:
隔离性级别
不一致的现象
Read uncommitted
读脏数据,不能重复读,幻想读
Read committed
不能重复读,幻想读
Repeatable read:
幻想读
Serializable
实际的数据库中都是通过封锁机制来实现的:
Read uncommitted:不发出任何锁。
Read committed:发出一个共享锁
Repeatable read:两次读取之间锁是一致保持的。
Serializable:不但对现有数据的锁封锁,而且是根据事务的查询条件封锁。
- oracle 事务
- Oracle事务
- Oracle 事务
- 【Oracle】事务
- oracle事务
- oracle事务
- oracle事务
- Oracle事务
- Oracle事务
- Oracle事务
- oracle/事务
- oracle事务
- oracle 事务
- oracle事务
- Oracle事务
- Oracle事务
- oracle事务
- Oracle事务
- Linux手动清空Buffer和cache内存缓存
- VIM Config
- 【浏览器】一、FF与IE在计算屏幕尺寸时的异同
- minimalcomps panel
- 末日的爱情
- Oracle事务
- javascript和jQuery知识点总结
- Aptana的安装方法
- 在线人数统计
- Java关键字一览表
- svn代码回滚命令
- C++->json
- 11 个惊人的 CSS3 和 jQuery 制作的教程收集 .
- 用按钮实现链接