我们都知道,数据库中都使用事务这个概念来处理对数据库的操作。事务处理具有ACID的特点,分别代表原子性、一致性、隔离性和持久性。数据都采用标准的COMMIT和ROLLBACK来决定对事务的提交或回滚。一些数据库缺省具有“非链式”事务模式,一般不需显示指定COMMIT或ROLLBACK,如ASE、MS SQL Server;一些数据库缺省使用“链式”事务模式,需要明确指定COMMIT或ROLLBACK,如Oracle。
事务的开始与结束:
在ASA中,一个事务有两种开始的可能:
连接数据库后的第一个语句
一个事务结束后的第一个语句
一个事务有两种结束的标志:
COMMIT(大部分的DDL——数据定义语言,如CREATE TABLE、ALTER...、DROP...——都采用自动提交技术)
ROLLBACK(与数据库断开连接执行一个隐式的回滚)
在ASA中,控制事务的提交与回滚通过Rollback Log这个重要的手段完成。回滚日志(Rollback Log)对于每个连接均有一个,存在于数据库内存及数据库文件中。它里面包含的针对事务对数据的修改的“反向”SQL语句。例如,我们从dbiSQL中发出命令:INSERT INTO employee VALUES(250, ...),那么反向SQL里面,也就是回滚日志里面的内容就是DELETE employee WHERE emp_id = 250。在后续事务结束的时候,倘若我们发出COMMIT语句提交修改,那么回滚日志里面的内容就自动删除;若我们发出ROLLBACK语句回滚事务,那么ASA将执行回滚日志中与该事务相关的语句,然后删除回滚日志的内容。这样,就实现了事务的提交和回滚。
当然,在ASA处理事务的过程中,也支持SAVEPOINT(保存点)。它可支持事务回滚到保存点处,而非全部回滚。保存点可以嵌套。SAVEPOINT 语句定义事务执行过程中的中间点。使用 ROLLBACK TO SAVEPOINT 语句可以撤消该点后的所有更改。执行了 RELEASE SAVEPOINT 语句或事务结束后,则不能再使用该保存点。请注意,保存点对提交没有影响。当执行 COMMIT 时,该事务内的所有更改都在数据库中永久生效。RELEASE SAVEPOINT 或 ROLLBACK TO SAVEPOINT 命令不会释放任何锁:只有在事务结束后才会释放锁。
下一部分将继续介绍ASA的锁机制和事务隔离级别。 <script type="text/javascript"> </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>