[Oracle Transaction]Oracle数据库事务
2007-07-09 22:47
871 查看
本人的Blog更新:http://www.iwllsea.com/default.asp?cateID=9,涉及更多Oracle文章,希望对大家有所帮助。
1.0摘要
本篇主要介绍什么是事务以及对数据库操作时如何控制事务。
2.0内容
1、 什么是事务
2、 事务的控制
1、 什么是事务
事务是作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务:
原子性:事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
一致性:事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。
隔离性:由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
持久性:事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。
所以,当我们需要进行事务处理时,一定要做好事务划分,即哪些对数据库的操作均完成后才能作为一个事务。
2、 事务的控制
oracle没有“开始事务”的语句,事务隐式地开始于第一条修改数据的语句,并以commit或rollback语句显式的结束事务。一条语句要么完全执行,要么完全回滚,一条语句的失败不能使它前面执行的语句自动回滚。
事务控制语句:commit,rollback,savepoint,rollback to <savepoint>
set transaction:设置不同的事物属性,例如隔离等级和是否只读或可读写,也可以使用此语句来指示事务使用某个特定的回滚段。
COMMIT是事务提交命令。
ROLLBACK是事务回滚命令,在尚未提交commit命令之前,如果发现delete、insert和update等操作需要恢复的话,可以使用rollback命令回滚到上次commit时的状态。
SAVEPOINT是保存点命令。事务通常由数条命令组成,可以将每个事务划分成若干个部分进行保存,这样每次可以回滚每个保存点,而不必回滚整个事务。语法格式如下。
创建保存点:savepoint 保存点名;
回滚保存点:rollback to 保存点名;
例子:
运行结果如下:
执行完“断点一”后,上一个事务已经提交,下面开始的操作属于另一个事务。
单步执行到“断点二”,将该处的数据保存为一个一个状态,但是没有提交。
单步执行到“断点三”,将该处的数据保存为一个一个状态,但是没有提交。
单步执行到“断点四”,将数据库的数据回滚,回滚到“断点三”的状态,这时的数据与执行到“断点三”的数据一样。
单步执行到“断点五”,将数据库的数据回滚,回滚到“断点二”的状态,这时的数据与执行到“断点二”的数据一样。
单步执行到“断点六”,将数据库的数据回滚,回滚到“断点一”的状态,这时的数据与执行到“断点一”的数据一样。
1.0摘要
本篇主要介绍什么是事务以及对数据库操作时如何控制事务。
2.0内容
1、 什么是事务
2、 事务的控制
1、 什么是事务
事务是作为单个逻辑工作单元执行的一系列操作。一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务:
原子性:事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
一致性:事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。
隔离性:由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
持久性:事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。
所以,当我们需要进行事务处理时,一定要做好事务划分,即哪些对数据库的操作均完成后才能作为一个事务。
2、 事务的控制
oracle没有“开始事务”的语句,事务隐式地开始于第一条修改数据的语句,并以commit或rollback语句显式的结束事务。一条语句要么完全执行,要么完全回滚,一条语句的失败不能使它前面执行的语句自动回滚。
事务控制语句:commit,rollback,savepoint,rollback to <savepoint>
set transaction:设置不同的事物属性,例如隔离等级和是否只读或可读写,也可以使用此语句来指示事务使用某个特定的回滚段。
COMMIT是事务提交命令。
ROLLBACK是事务回滚命令,在尚未提交commit命令之前,如果发现delete、insert和update等操作需要恢复的话,可以使用rollback命令回滚到上次commit时的状态。
SAVEPOINT是保存点命令。事务通常由数条命令组成,可以将每个事务划分成若干个部分进行保存,这样每次可以回滚每个保存点,而不必回滚整个事务。语法格式如下。
创建保存点:savepoint 保存点名;
回滚保存点:rollback to 保存点名;
例子:
[align=left]PROCEDURE VENUSTEST[/align] [align=left] [/align] [align=left]IS[/align] [align=left] i NUMBER (10);[/align] [align=left] a NUMBER (10);[/align]
[align=left] COMMIT;[/align] [align=left] [/align] [align=left] INSERT INTO alex_test[/align] [align=left] VALUES ('Venus', 'Venus' || 'aaa' || 'Feng');[/align] [align=left] [/align] [align=left] INSERT INTO alex_test[/align] [align=left] VALUES ('Jessie', 'Jessie' || 'TestA');[/align] [align=left] [/align] INSERT INTO alex_test< b950 /div> [align=left] VALUES ('Jessie', 'Jessie' || 'TestB');[/align] [align=left] [/align] [align=left] INSERT INTO alex_test[/align] [align=left] VALUES ('Jessie', 'Jessie' || 'TestC');[/align]
[align=left] SAVEPOINT a;[/align] [align=left] [/align] [align=left] UPDATE alex_test[/align] [align=left] SET testcontents = 'TestBB'[/align] [align=left] WHERE testname = 'Jessie' AND testcontents = 'TestB';[/align] [align=left] [/align] [align=left] INSERT INTO alex_test[/align] [align=left] VALUES ('Jessie', 'Jessie' || 'TestD');[/align]
[align=left] SAVEPOINT b;[/align] [align=left] [/align] [align=left] DELETE FROM alex_test[/align] [align=left] WHERE testname = 'Jessie';[/align]
[align=left] ROLLBACK TO SAVEPOINT b;[/align]
[align=left]EXCEPTION[/align] [align=left] WHEN OTHERS[/align] [align=left] THEN[/align] [align=left] ROLLBACK;[/align] [align=left]END;[/align] |
执行完“断点一”后,上一个事务已经提交,下面开始的操作属于另一个事务。
单步执行到“断点二”,将该处的数据保存为一个一个状态,但是没有提交。
单步执行到“断点三”,将该处的数据保存为一个一个状态,但是没有提交。
单步执行到“断点四”,将数据库的数据回滚,回滚到“断点三”的状态,这时的数据与执行到“断点三”的数据一样。
单步执行到“断点五”,将数据库的数据回滚,回滚到“断点二”的状态,这时的数据与执行到“断点二”的数据一样。
单步执行到“断点六”,将数据库的数据回滚,回滚到“断点一”的状态,这时的数据与执行到“断点一”的数据一样。
相关文章推荐
- C#中 Oracle数据库事务(OracleTransaction),在事务中执行其他命令
- Oracle数据库事务(OracleTransaction)在C#中的一些简单应用
- (转)关于Oracle AUTONOMOUS TRANSACTION(自治事务)的介绍
- 【Oracle学习】之 事务(Transaction)与锁
- Oracle 11g R2 DBA 操作指南(15) 事务(Transaction)
- Oracle PL/SQL之SET TRANSACTION READ ONLY(事务隔离性)
- oracle 自制事务 PRAGMA AUTONOMOUS_TRANSACTION
- oracle 自治事务 PRAGMA AUTONOMOUS_TRANSACTION
- Oracle自治事务的介绍(Autonomous Transactions)PRAGMA AUTONOMOUS_TRANSACTION;
- Oracle自治事务的介绍(Autonomous Transactions)PRAGMA AUTONOMOUS_TRANSACTION;
- oracle 自治事务 PRAGMA AUTONOMOUS_TRANSACTION
- 关于Oracle AUTONOMOUS TRANSACTION(自治事务)的介绍
- Oracle PL/SQL之SET TRANSACTION READ ONLY(事务隔离性)
- Oracle嵌套事务(Nested Transaction)与自治事务(Autonomous Transaction)详解
- 关于Oracle AUTONOMOUS TRANSACTION(自治事务)的介绍
- Oracle数据库(Oracle存储结构、Oracle运行机制、日期相关的函数、序列、大对象数据类型、表的修改与约束、事务)
- Oracle PL/SQL之SET TRANSACTION READ ONLY(事务隔离性)
- Asp.net Oracle transaction事务出现奇怪的aotucommit自动提交现象及解决办法
- PRAGMA AUTONOMOUS_TRANSACTION oracle 自治事务
- 关于Oracle AUTONOMOUS TRANSACTION(自治事务)的介绍