返回介绍

PL/SQL 事务 - PL/SQL 教程

发布于 2025-02-22 13:46:47 字数 2539 浏览 0 评论 0 收藏 0

数据库事务是一个工作的原子单元,其可以由一个或多个相关的 SQL 语句组成。所谓的原子性就是数据库的修改所带来的构成事务的 SQL 语句可以集体被提交,即永久到数据库或从数据库中(撤消) 回滚。

一个成功执行的 SQL 语句和提交的事务不一样。即使一个 SQL 语句执行成功,除非包含该语句的事务被提交,但也可以回滚和声明(S) 的所有更改可以撤消。

开始/结束事务

事务都有开始和结束。事务开始时有下列事件之一:

  • 连接到数据库后执行的第一个 SQL 语句。
  • 在事务完成之后发出每一个新的 SQL 语句完成。

事务结束时的下列事件之一发生:

  • COMMIT 或发出 ROLLBACK 语句。
  • DDL 语句,如 CREATE TABLE 语句,则发出;因为在这种情况下,COMMIT 被自动执行。
  • 一个 DCL 语句,比如一个 GRANT 语句发出; 因为在这种情况下,COMMIT 被自动执行。
  • 用户从数据库断开。
  • 从 SQL* PLUS 用户退出通过发出 EXIT 指令,COMMIT 自动执行。
  • SQL* Plus 异常终止,自动执行 ROLLBACK。
  • 一个 DML 语句失败; 在这种情况下自动执行撤消 DML 语句 ROLLBACK。

提交事务

事务是通过发出 SQL 命令 COMMIT 永久生效。COMMIT 命令的一般语法是:

COMMIT;

示例,

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (3, 'kaushik', 23, 'Kota', 2000.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (4, 'Chaitali', 25, 'Mumbai', 6500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (5, 'Hardik', 27, 'Bhopal', 8500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (6, 'Komal', 22, 'MP', 4500.00 );
COMMIT;

回滚事务

对数据库所做的不提交更改可以使用 ROLLBACK 命令撤消。

ROLLBACK 命令的一般语法是:

ROLLBACK [TO SAVEPOINT < saveyiibai_name>];

当一个事务因一些前所未有的情况中止,如系统故障,则整个事务由于提交自动回滚。如果不使用保存点,然后简单地使用下面的语句来回滚所有的变化:

ROLLBACK;

保存点

保存点是某种标志,帮助分裂一个长事务分成更小的单位设置了一些检查点。由一个长事务中设置保存点,可以根据需要回滚到一个检查点。这是通过发出 SAVEPOINT 命令来完成。

保存点命令的一般语法是:

SAVEPOINT < saveyiibai_name >;

示例:

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (7, 'Rajnish', 27, 'HP', 9500.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (8, 'Riddhi', 21, 'WB', 4500.00 );
SAVEPOINT sav1;

UPDATE CUSTOMERS
SET SALARY = SALARY + 1000;
ROLLBACK TO sav1;

UPDATE CUSTOMERS
SET SALARY = SALARY + 1000
WHERE ID = 7;
UPDATE CUSTOMERS
SET SALARY = SALARY + 1000
WHERE ID = 8;
COMMIT;

在这里,ROLLBACK TO sav1; 声明回滚变化到一点,在那里标志着保存点 sav1,之后将开始新的变化。

自动事务控制

要执行一个自动 COMMIT 在每一个 INSERT,UPDATE 或 DELETE 命令执行时,可以设置 AUTOCOMMIT 环境变量:

SET AUTOCOMMIT ON;

可以关闭使用以下命令自动提交模式:

SET AUTOCOMMIT OFF;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文