PL/SQL - 事务(Transactions)

PL/SQL - 事务(Transactions) 首页 / PL/SQL入门教程 / PL/SQL - 事务(Transactions)

在本章中,无涯教程将讨论PL/SQL中的事务,数据库事务是一个基本的工作单元,可能包含一个或多个相关的SQL语句。

开始&结束事务

事务具有beginningend 。发生以下事件之一时,事务beginning-

  • 第一个SQL语句在连接到数据库后执行。

  • 在事务完成后发出的每个新SQL语句中。

发生以下事件之一时,事务end-

  • 发出 COMMITROLLBACK 语句。

  • 发出了 DDL 语句,如 CREATE TABLE 语句;因为在这种情况下会自动执行COMMIT

  • 发出了 DCL 语句,如 GRANT 语句;因为在这种情况下会自动执行COMMIT

  • 用户与数据库断开连接。

  • 用户通过发出 EXIT 命令从 SQL * PLUS 退出,将自动执行COMMIT

  • SQL * Plus异常终止,自动执行 ROLLBACK

  • DML 语句失败;在这种情况下,将自动执行ROLLBACK以撤消该DML语句。

提交事务

通过发出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;

回滚事务

不使用COMMIT的情况下对数据库所做的更改可以使用ROLLBACK命令撤消。

ROLLBACK命令的一般语法是-

ROLLBACK [TO SAVEPOINT < savepoint_name>]; 

当事务由于某些前所未有的情况(如系统故障)而中止时,由于提交,整个事务将自动回滚,如果您没有使用 savepoint ,则只需使用以下语句回滚所有更改-

ROLLBACK;

Savepoints

保存点是一种标签,可通过设置一些检查点来帮助将长事务分成较小的单元,通过在长事务中设置保存点,可以根据需要回滚到检查点,这是通过发出SAVEPOINT命令来完成的。

SAVEPOINT < savepoint_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;

回滚到sav1 -此语句回滚所有更改,直到标签了保存点sav1为止。

自动事务控制

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

SET AUTOCOMMIT ON; 

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

SET AUTOCOMMIT OFF;

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

即时消息技术剖析与实战 -〔袁武林〕

DDD实战课 -〔欧创新〕

Flink核心技术与实战 -〔张利兵〕

动态规划面试宝典 -〔卢誉声〕

超级访谈:对话张雪峰 -〔张雪峰〕

Web漏洞挖掘实战 -〔王昊天〕

eBPF核心技术与实战 -〔倪朋飞〕

运维监控系统实战笔记 -〔秦晓辉〕

AI大模型之美 -〔徐文浩〕

好记忆不如烂笔头。留下您的足迹吧 :)