oracle事务的组成

news2025/3/22 4:58:43

1)数据库事务由以下的部分组成:
一个或多个DML 语句 ;
一个 DDL(Data Definition Language – 数据定义语言) 语句;
一个 DCL(Data Control Language – 数据控制语言)语句;
2)事务的执行开始:
以第一个 DML 语句的执行作为开始 ,以下面的其中之一作为结束:
COMMIT 或 ROLLBACK 语句;
DDL 或 DCL 语句自动提交;
3)事务的执行过程
COMMIT:保存自上一次COMMIT或ROLLBACK以来的所有改变。
ROLLBACK:回滚所有自上一次COMMIT或ROLLBACK以来的所有改变。对dml语句进行的操作,都可以进行回退。
ROLLBACK TO SAVEPOINT:回滚所有的改变到一个已经保存的保存点。
4)事务结束的标志:
用户会话正常结束;
系统异常;
5)事务控制语句的设置
Set transaction:设置事务的属性
Set constrains:设置当前事务的约束模式,设置约束是修改数据的时候,立即起作用,还是当前事务结束后应用。
Savepoint :在事务中建立一个存储点,回滚时,可以指定回滚到什么地方,然后重新执行.
Release savepoint:删除一个存储点
Rollback:回滚事务。取消对数据库所做的任何修改
Commit:提交事务,把事务中对数据库的修改进行永久保存
数据异常:因为Oracle中支持多个事务并发执行,所以会出现下面的数据异常。
错读|脏读:当user1正在读数据库中的表A时,user2正在修改表A,user2修改完了,user1又读一遍表A,user1读出的是修改过的数据,而user2又撤消修改了,user1的读取表A,称为错读或者脏读。
非重复读|不重复读:是指一个事务读取数据库中的数据后,另一个事务则更新了数据,当第一个事务再次读取其中的数据时,就会发现数据已经发生了改变,这就是非重复读取。非重复读取所导致的结果就是一个事务前后两次读取的数据不相同。
假读|幻读:如果一个事务基于某个条件读取数据后,另一个事务则更新了同一个表中的数据,这时第一个事务再次读取数据时,根据搜索的条件返回了不同的行,这就是假读。
事务中遇到的这些异常与事务的隔离性设置有关,事务的隔离性设置越多,异常就出现的越少,但并发效果就越低,事务的隔离性设置越少,异常出现的越多,并发效果越高。
选择隔离层
针对读取的数据时产生的不一致现象,在ANSI SQL标准92中定义了4个事务的隔离级别,见表4-1。
表4-1隔离级别
隔离级别 错读|脏读 非重复读|复读 假读|幻读
Read uncommitted(非提交读) 是 是 是
Read committed(提交读) 否 是 是
Repeatable read(可重复读) 否 否
Serializable(串行读) 否 否 否

Oracle默认的隔离级别是read committed 。
Oracle支持上述地址隔离层中的两种read committed和Serializable除此之外Oracle中还设置了read only和read write隔离层 。
Serializable:设置事务的隔离层为它时,事务与事务之间完全隔开,事务以串行的方式执
行。
Read only :事务中不能有任何修改数据库中的数据的操作语句,如insert、update、delete、create语句,read only 是Serializable的子集,区别是read only只读,Serializable和执行DML语句。
Read write:是默认设置,改选项表示在事务中可以有访问语句。修改语句。但不经常使用
设置事务的属性只读 ,代码如下:
Set transaction read noly
设置事务的属性读写 ,代码如下:
Set transaction read write
设置事务隔离级别读取命令,代码如下:
Set transaction isolation level read commnitted
设置事务隔离级别可序列化 ,代码如下:
Set transaction isolation level serializable
【例4-9】建立表plsql101_purchas,插入测试记录。使用保存点,对事务进行回滚,查看每次回退,查询表plsql101_purchas数据。
建立表plsql101_purchas,插入测试记录,代码如下:
–第四章\zsgc.sql

CREATE TABLE plsql101_purchase (
product_name VARCHAR2(25),
quantity NUMBER(4,2),
purchase_date DATE,
salesperson VARCHAR2(3)
);
INSERT INTO plsql101_purchase VALUES
(‘Small Widget’, 1, ‘14-7月-03’, ‘CA’);
INSERT INTO plsql101_purchase VALUES
(‘Medium Wodget’, 75, ‘14-7月-03’, ‘BB’);
INSERT INTO plsql101_purchase VALUES
(‘Chrome Phoobar’, 2, ‘14-7月-03’, ‘GA’);
INSERT INTO plsql101_purchase VALUES
(‘Small Widget’, 8, ‘15-7月-03’, ‘GA’);
INSERT INTO plsql101_purchase VALUES
(‘Medium Wodget’, 20, ‘15-7月-03’, ‘LB’);
INSERT INTO plsql101_purchase VALUES
(‘Chrome Phoobar’, 2, ‘16-7月-03’, ‘CA’);
INSERT INTO plsql101_purchase VALUES
(‘Round Snaphoo’, 25, ‘16-7月-03’, ‘LB’);
INSERT INTO plsql101_purchase VALUES
(‘Chrome Phoobar’, 2, ‘17-7月-03’, ‘BB’);
Commit;

–查询表数据
SELECT * FROM plsql101_purchase;

执行查询后,如图所示4-21。

图4-21第七次执行账户金额

插入3条数据,设置三个保在这里插入图片描述
存点,代码如下:
INSERT INTO plsql101_purchase VALUES
(‘Small Widget21a’, 1, ‘14-7月-20’, ‘CA’);
SAVEPOINT a;
INSERT INTO plsql101_purchase VALUES
(‘Medium Wodget21b’, 75, ‘14-7月-21’, ‘BB’);
SAVEPOINT sp_2;
INSERT INTO plsql101_purchase VALUES
(‘Chrome Phoobar21c’, 2, ‘14-7月-22’, ‘GA’);
SAVEPOINT third;
回退到第一个断点,代码如下:
ROLLBACK TO a;
SELECT * FROM plsql101_purchase;
执行后如图4-22所示。
在这里插入图片描述

图4-22回退到第一个断点

回退到第二个断点,代码如下:
ROLLBACK TO sp_2;
SELECT * FROM plsql101_purchase;

执行后如图4-23所示。
在这里插入图片描述

图4-23回退到第二个断点
回退到整个表,代码如下:
ROLLBACK;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2319336.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【如何在OpenWebUI中使用FLUX绘画:基于硅基流动免费API的完整指南】

如何在OpenWebUI中使用FLUX绘画:基于硅基流动免费API的完整指南 注册并获取硅基流动秘钥OpenWebUI中使用函数配置自定义模型-提示词配置效果验证 ) FLUX绘画是一种强大的AI绘图工具,本文将详细介绍如何在OpenWebUI中集成并使用FLUX绘画功能,…

Facebook 如何影响元宇宙的发展趋势

Facebook 如何影响元宇宙的发展趋势 引言 元宇宙(Metaverse)这个概念,曾经只存在于科幻小说中,如今正逐渐成为现实。它是一个由多个 3D 虚拟世界组成的网络,用户可以在其中进行社交、游戏、工作等活动。Facebook&…

1.5.7 掌握Scala内建控制结构 - 变量作用域

本次实战深入理解了Scala中变量作用域的概念,通过两个任务演示了作用域的基本规则。在任务1中,我们创建了一个名为ScopeDemo01的对象,展示了内部作用域能够访问外部作用域的变量。通过在if语句块中访问在外部定义的message变量,我…

RAID磁盘阵列管理

一. 什么是RAID RAID是英文Redundant Array of Independent Disks的缩写,中文翻译过来就是“独立冗余磁盘阵列”。简单的说,RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘&#…

微博ip属地不发微博会不会变

随着社交媒体的普及,微博作为其中的佼佼者,一直备受关注。而且微博上线了显示用户IP属地的功能,这一功能旨在减少冒充热点事件当事人、恶意造谣、蹭流量等不良行为,确保传播内容的真实性和透明度。然而,这也引发了一些…

C#从入门到精通(1)

目录 第一章 C#与VS介绍 第二章 第一个C#程序 (1)C#程序基本组成 1.命名空间 2.类 3.Main方法 4.注释 5.语句 6.标识符及关键字 (2)程序编写规范 1.代码编写规则 2.程序命名方法 3.元素命名规范 第三章 变量 &…

仿“东方甄选”直播商城小程序运营平台

在公域直播流量红利趋于饱和、流量成本大幅攀升的当下,私域直播为企业开辟了新的流量聚集和转化渠道,特别是对于那些希望在私域流量领域取得突破的品牌商家来说,直播场景以其独特的高频互动氛围,相比其他运营方式,展现…

ORACLE 19.8版本数据库环境EXPDP导数据的报错处理

近期用户在做EXPDP导出时,报错异常termination终止;EXPDP本身是简单的功能并且这个环境也是经常做导出的,到底是什么原因导致了这个问题呢? 导出脚本报错: 分析导出日志,当时系统资源充足但是进程启动失败,…

LabVIEW运动控制(二):EtherCAT运动控制器的多轴示教加工应用(下)

前面两节课程分别给大家介绍了“控制器连接、定时获取轴状态、轴坐标、控制器型号、轴参数设置、IO控制、Basic文件下载”(详情点击→LabVIEW运动控制(二):EtherCAT运动控制器的多轴示教加工应用(上)&#…

纯内网环境安装1Panel面板与商店应用

文章目录 前序准备开始联网机器配置1Panel配置安装所有离线需要的应用导出Docker镜像导出1Panel配置 离线机器配置安装1Panel覆盖配置导入容器镜像重建应用 关于Jar包的运行 前序 之前一篇文章讲解了如何在内网环境下安装1Panel并操作商店应用安装应用程序,但是在一…

OpenCV计算摄影学(22)将输入的彩色图像转换为两种风格的铅笔素描效果函数pencilSketch()

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 铅笔风格非写实线描图。 该函数通过图像处理技术将输入的彩色图像转换为两种风格的铅笔素描效果: dst1:炭笔效果的灰度图…

影响单模光纤耦合效率的分析

影响单模光纤耦合效率的因素 如果想使单模光纤的耦合效率最高,入射光束需要满足以下条件: (1)入射光束接近高斯光; (2)入射光束从光纤端面正入射; (3)入射…

windows+ragflow+deepseek实战之一excel表查询

ragflows平台部署参考文章 Win10系统Docker+DeepSeek+ragflow搭建本地知识库 ragflow通过python实现参考这篇文章 ragflow通过python实现 文章目录 背景效果1、准备数据2、创建知识库3、上传数据并解析4、新建聊天助理5、测试会话背景 前面已经基于Win10系统Docker+DeepSeek+…

从“不敢买大”到“按墙选屏”,海信电视如何凭百吋重构客厅?

电视买小了,成为茜茜新房入住后最大的遗憾。 新房装修的时候,茜茜担心电视买大了眼睛看着累,因此把尺寸选在了65吋。结果入住后,孩子看动画片嚷着“画面太小”,老公看球赛吐槽“看不清球员号码”,全家追剧…

ABAP 长文本编辑器

加个屏幕 *&---------------------------------------------------------------------* *& Report YDEMO2 *&---------------------------------------------------------------------* *& *&---------------------------------------------------------…

MATLAB 调用arduino uno

为了授课,必须重新把arduino用上。 采用MATLAB编码,可以简化相关程序授课部分 1 安装包 MATLAB Support Package for Arduino Hardware - File Exchange - MATLAB Central (mathworks.com) 需要这个插件。 当然也可下载simulink的模块,但…

Git——分布式版本控制工具使用教程

本文主要介绍两种版本控制工具——SVN和Git的概念,接着会讲到Git的安装,Git常用的命令,以及怎么在Vscode中使用Git。帮助新手小白快速上手Git。如果想直接上手用Vscode操作远程仓库则直接看7和9即可! 目录 1. SVN和Git介绍 1.1 …

【数据分析】数据筛选与访问行列元素3

访问元素 .loc属性可以通过传入index的值访问行数据。 .loc属性允许传入两个参数,分别是index的值和columns的值,参数间用“逗号”隔开,这样便可以访问数据中的元素。 1. 访问单个元素 访问单个元素比较简单,只需要通过它的in…

爬虫——playwright获取亚马逊数据

目录 playwright简介使用playwright初窥亚马逊安装playwright打开亚马逊页面 搞数据搜索修改bug数据获取翻页优化结构 简单保存 playwright简介 playwright是微软新出的一个测试工具,与selenium类似,不过与selenium比起来还是有其自身的优势的&#xff…

大数据学习(77)-Hive详解

🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…