如果您有一个只读数据库,则不必担心事务。但是对于你将要构建的几乎所有应用程序,情况并非如此。因此,交易的概念和管理对于您的应用程序的成功至关重要。
事务是Oracle数据库作为一个单元处理的一个或多个SQL语句的序列:要么执行所有语句,要么都不执行。事务隐含地从获取TX锁的任何操作开始:
- 发出修改数据的语句(例如,插入,更新,删除,合并)
- 发出SELECT ... FOR UPDATE语句时
- 使用SET TRANSACTION语句或DBMS_TRANSACTION包显式启动事务时
发出COMMIT或ROLLBACK语句会明确结束当前事务。
本文将介绍如何使用以下语句和功能定义,管理和控制应用程序中的事务:
- 提交和回滚
- 保存点
- 自治交易
- SET TRANSACTION语句
您可以在下面的事务处理和控制(doc)以及Oracle Live SQL和Oracle Dev Gym资源的链接中找到更多详细信息。
提交和回滚
回想一下事务的定义:“事务是Oracle数据库作为一个单元处理的一个或多个SQL语句的序列:要么执行所有语句,要么都不执行。” 当所有语句都“执行”时,这意味着您已将它们提交或保存到数据库中。
使用COMMIT语句保存所有更改,并使其对其他用户可见。请记住:在提交之前,没有人能够看到特定会话中所做的更改。提交后,每个有权访问受影响表的用户现在都可以看到表的新“状态”。
使用ROLLBACK语句撤消自上次提交以来(或自您在会话中启动第一个事务以来)的所有更改。
此LiveSQL教程(Oracle Dev Gym上的开发人员数据库课程的一部分)演示了事务管理的这些基本元素。
可是等等!如果您只想撤消会话中的某些更改,但保留其他更改,准备在将来的某个时间点提交,该怎么办?欢迎来到保存点世界。
保存点
保存点允许您回滚部分事务而不是整个事务。每个会话的活动保存点数量不受限制。
回滚到保存点时,标记在该保存点之后的任何保存点都将被删除。回滚的保存点不会被删除。简单的回滚或提交会擦除所有保存点。
保存点名称是未声明的标识符。在事务中重用保存点名称会将保存点从其旧位置移动到事务中的当前点,这意味着回滚到保存点仅影响事务的当前部分。
对于我们之间的递归程序员:如果在递归子程序中标记保存点,则SAVEPOINT语句的新实例在递归下降的每个级别运行,但是您只能回滚到最近标记的保存点。
以下是使用保存点的示例(从同一个LiveSQL教程中提取):
CREATE TABLE玩具
(
toy_id INTEGER,
toy_name VARCHAR2(100),
颜色 VARCHAR2(10)
)
/
宣布
l_count INTEGER ;
开始
INSERT