当前位置:网站首页>PL/SQL 事务
PL/SQL 事务
2022-07-29 11:39:00 【一只特立独行的_小猫】
目录
数据库事务是由一个或多个相关SQL语句组成的原子工作单元。它被称为原子操作,因为构成事务的SQL语句带来的数据库修改可以共同提交,即永久化到数据库或从数据库回滚(撤销)。成功执行的SQL语句和提交的事务不一样,即使成功执行SQL语句,除非提交包含语句的事务,否则可以回滚该语句,并且可以撤消语句所做的所有更改。
开始事务
当发生下列事件之一时,事务即开始:
- 连接到数据库后执行第一个SQL语句。
- 在事务完成后发出的每个新的SQL语句。
结束事务
当发生下列事件之一时,事务即结束:
- 发出了COMMIT或ROLLBACK语句。
- 发出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 (6, 'Komal', 22, 'MP', 4500.00 );
COMMIT;回滚事务
使用ROLLBACK命令可以撤销对不带COMMIT的数据库所做的更改。ROLLBACK命令的一般语法是:
ROLLBACK [TO SAVEPOINT <savepoint_name>];
当事务由于某种前所未有的情况而中止,如系统故障时,自提交以来整个事务被自动回滚。如果不使用保存点(savepoint),那么只需使用以下语句来回滚所有更改。
ROLLBACK;
保存点(Savepoints)
保存点(Savepoints)是有助于通过设置一些检查点将长事务拆分成更小的单元的标记。通过在长事务中设置保存点,如果需要,可以回滚到检查点。这是通过发出SAVEPOINT命令完成的。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; -- 此语句回滚直到保存点sav1的所有更改。之后,所做新的改变将重新开始。
UPDATE CUSTOMERS
SET SALARY = SALARY + 1000
WHERE ID = 7;
UPDATE CUSTOMERS
SET SALARY = SALARY + 1000
WHERE ID = 8;
COMMIT;自动事务控制
要在执行INSERT,UPDATE或DELETE命令时自动执行COMMIT,可以将AUTOCOMMIT环境变量设置为自动提交,如:
SET AUTOCOMMIT ON;也可以使用以下命令关闭事务自动提交模式:
SET AUTOCOMMIT OFF;边栏推荐
- [image processing] image skeleton extraction based on central axis transformation with matlab code
- QT's user-defined interface (borderless and movable)
- Exclusive interview | Cheng Li, chief technology officer of Alibaba: cloud + open source together form a credible foundation for the digital world
- Design and implementation of gbase8s Informix dodker high availability cluster self recovery cluster startup command oninitdb
- 使用anyio替代asyncio
- 8. Interleave - understand ThreadPoolExecutor thread pool from architecture design to practice
- 一次node文件操作过多排查过程总结
- 精通音视频开发是真的可以为所欲为
- HMS Core Discovery 16 review | with tiger mound, embracing new AI "voice" state
- AMH6.X升级到AMH7.0后,登录后台提示MySQL连接出错怎么解决?
猜你喜欢

Summer vacation training week1

QML(二):设置自定义窗体

Starrocks technology insider: how to have both real-time update and fast query
Xiaoxiao authorization system V5.0 happy version

three.js 报错信息 RGBELoader.js:46 RGBELoader Bad File Format: bad initial token

如何对SQuAD1.1数据集进行预处理「详解版」

What is kubernetes custom resource definition (CRD)?

【年中总结】创业3年,越来越穷,还是坚持架构平台

Why should kubernetes be used in development environments

CSDN TOP1“一个处女座的程序猿“如何通过写作成为百万粉丝博主
随机推荐
面试官培训课件(非常实用的企业内训课件)
深入理解C# 进入快速通道的委托
7月3日文: 表面上有危险,实属安全周期,大概率会快速上扬的个股
暑假集训week1
ASN.1接口描述语言详解
Spark efficient data analysis 02, basic knowledge 13
Flink UDF 函数汇总
什么是 Kubernetes 自定义资源定义 (CRD)?
Insights into the development of the enterprise live broadcast industry in 2022
【Untitled】
小笑授权系统V5.0开心版
It is recommended to collect a thousand ways to write sql row to column!!
On CompareTo method in string
2022最新 wifi大师小程序独立版3.0.8
自采集在线电脑壁纸php源码v2.0自适应端
socket+websocket
Why should kubernetes be used in development environments
1.MySQL数据库的介绍
HMS Core音频编辑服务音源分离与空间音频渲染,助力快速进入3D音频的世界
Use anyio instead of asyncio