当前位置: 首页 > news >正文

openGauss开源数据库实战二十二

文章目录

  • 任务二十二 使用JDBC访问openGauss数据库
    • 任务目标
    • 实施步骤
      • 一、查看和设置隔离级别
        • 1.查看系统默认的隔离级别
        • 2.设置系统默认的隔离级别
        • 3.查看当前会话的隔离级别
        • 4.设置当前会话的隔离级别
        • 5.设置当前事务的隔离级别
      • 二、读提交隔离级别测试
      • 三、可重复读隔离级别测试

任务二十二 使用JDBC访问openGauss数据库

任务目标

了解数据库隔离级别的含义,并对其进行测试。

实施步骤

一、查看和设置隔离级别

1.查看系统默认的隔离级别

使用Linux用户omm,打开一个Linux终端窗口,执行如下的命令:

gsql -d studentdb -h 192.168.100.91 -U student -p 26000 -W student@ustb2020 -r
show default_transaction_isolation;
\q
2.设置系统默认的隔离级别

使用Linux vi编辑器,修改openGauss数据库管理系统的启动参数文件中的参数default_transaction_isolation,并reload数据库实例使参数生效。过程如下:
在这里插入图片描述
还记我们实验二安装openGauss数据库时用到的cluster_config.xml文件吗?
这个文件是我们自己配置的,指明了数据库的安装的具体位置,笔者安装的位置为:/opt/huawei/data/dn/postgresql.conf。

vi /opt/huawei/install/data/dn/postgresql.conf

将下面这行:

#default_transaction_isolation = 'read committed'

修改为:

default_transaction_isolation = 'REPEATABLE READ'

不需要重新启动数据库,执行下面的命令reload参数文件,让参数生效:

gsql -d postgres -p 26000 -r
select pg_reload_conf();
\q 

执行下面的命令,再次查看系统当前的隔离级别:

gsql -d studentdb -h 192.168.100.91 -U student -p 26000 -W student@ustb2020 -r
show default_transaction_isolation;
\q

我们发现,openGauss数据库的隔离级别已经被修改为REPEATABLE READ
也可以执行下面的命令来修改系统的隔离级别。直接执行下面的命令,可以一步完成修改参数文件并reload的操作:

gs_guc reload -N all -I all -c "default_transaction_isolation = 'read committed'"
gsql -d postgres -p 26000 -r
show default_transaction_isolation;
\q 

在这里插入图片描述

3.查看当前会话的隔离级别

执行下面的命令和SQL语句,查看当前会话的隔离级别(请注意,有两种查看的方法):

gsql -d studentdb -h 192.168.100.91 -U student -p 26000 -W student@ustb2020 -r
show transaction_isolation;
SELECT current_setting('transaction_isolation');
\q
4.设置当前会话的隔离级别

执行下面的命令和SQL语句,设置并查看当前会话的隔离级别:

gsql -d studentdb -h 192.168.100.91 -U student -p 26000 -W student@ustb2020 -r
-- 下面的语句设置会话的隔离级别为REPEATABLE READ
SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL REPEATABLE READ;
show transaction_isolation;
\q

我们发现,会话的隔离级别已经被修改为REPEATABLE READ
退出当前会话之后,再次登录到数据库(新会话),我们发现该会话的隔离级别还是数据库原来的读提交隔离级别:

gsql -d studentdb -h 192.168.100.91 -U student -p 26000 -W student@ustb2020 -r
show transaction_isolation;
\q

也就是说,在会话级修改数据库的隔离级别,只影响当前的会话

5.设置当前事务的隔离级别

执行下面的命令和SQL语句,设置并查看当前事务的隔离级别:

gsql -d studentdb -h 192.168.100.91 -U student -p 26000 -W student@ustb2020 -r
-- 显示会话当前隔离级别
show transaction_isolation;
-- 开始一个新的事务,并设置新事务的隔离级别为REPEATABLE READ
START TRANSACTION ISOLATION LEVEL REPEATABLE READ; 
-- 显示事务当前隔离级别
show transaction_isolation;
-- 结束当前事务
commit;
-- 再次显示会话当前隔离级别
show transaction_isolation;
\q

上面的实验显示,登录openGauss DBMS之后,会话的隔离级别是数据库系统默认的隔离级别READ COMMITTED,在该会话中开始的新事务也继承了会话的隔离级别READ COMMITTED我们可以临时改变事务的隔离级别为REPEATABLE READ,当事务结束(本例为提交,也可以是回滚)后,新的事务又会恢复为原来的隔离级别。

二、读提交隔离级别测试

默认情况下openGauss会话的隔离级别是读提交,可以通过下面的实验来验证这一点。本实验需要在手动事务管理环境进行。
使用Linux用户omm,打开一个Linux终端窗口(将该窗口命名为窗口1),执行如下的命令:

gsql -d studentdb -h 192.168.100.91 -U student -p 26000 -W student@ustb2020 -r
\set AUTOCOMMIT off 
select * from instructor;
select sum(salary) from instructor;

使用Linux用户omm,打开另外一个Linux终端窗口(将该窗口命名为窗口2),执行如下的命令:

gsql -d studentdb -h 192.168.100.91 -U student -p 26000 -W student@ustb2020 -r
\set AUTOCOMMIT off 
select * from instructor;
select sum(salary) from instructor;

我们可以看到,在窗口1和窗口2的两个openGauss会话中,看到的表instructor的数据是一样的,因此教师的工资总和也是一样的。
继续在窗口2中执行如下的命令,插入一个新的教师记录后没有进行提交,直接查询插人新记录后的工资总和:

insert into instructor values('88888','Comp. Sci.','temp_user',60000);
select * from instructor;
select sum(salary) from instructor;

在这里插入图片描述

可以看到,在窗口2的会话中为表instructor插人一行数据后虽然暂时不提交,但在窗口2的会话中能看到这条记录,统计工资总和时也会加上这行的值(已经变成了958000)。
转到窗口1,执行如下的命令,再次查看表instructor的数据和教师的工资总和:

select * from instructor;
select sum(salary) from instructor;

在这里插入图片描述
目前,openGauss数据库会话的隔离级别是读提交,由于刚才在窗口2中插入的新行还没有提交,因此在这个会话中暂时还看不到表instructor数据的变化。
再次转到窗口2,执行如下的命令,提交刚才新插入的行:

commit;
select * from instructor;
select sum(salary) from instructor;

重新回到窗口1,执行如下命令,再次查看表instructor的数据和教师的工资总和:

select * from instructor;
select sum(salary) from instructor;

在这里插入图片描述
因为在窗口2中将刚才插人的新行进行了事务提交,窗口1的openGauss会话的数据库隔离级别是读提交,因此在窗口1中也可以看到这一已经完成事务提交的新插入行了。
最后做实验清理工作,以便继续下一个测试。首先随便在窗口1或者窗口2中,清除刚才添加的行:

delete from instructor where id='88888';
commit;

然后分别在窗口1和窗口2中执行下面的g8q1退出命令:

\q

三、可重复读隔离级别测试

使用Linux用户omm,打开一个Linux终端窗口(将该窗口命名为窗口1),执行如下的命令,设置新事务的隔离级别为可重复读,并开始这个事务:

gsql -d studentdb -h 192.168.100.91 -U student -p 26000 -W student@ustb2020 -r
-- 设置新事务的隔离级别为可重复读
BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ;
select * from instructor;
select sum(salary) from instructor;

使用Linux用户omm,打开另外一个Linux终端窗口(将该窗口命名为窗口2),执行如下的命令:

gsql -d studentdb -h 192.168.100.91 -U student -p 26000 -W student@ustb2020 -r
\set AUTOCOMMIT off
insert into instructor values('88888','Comp. Sci.','temp_user',60000);
commit;
select * from instructor;
select sum(salary) from instructor;

上面的代码显示,在窗口2的会话中为表instructor插人了一行新记录,并马上进行了事务提交。
在这里插入图片描述

转到窗口1,执行如下的命令:

select * from instructor;
select sum(salary) from instructor;

在这里插入图片描述
我们发现,虽然在窗口2的openGauss会话中将插人表instructor的行提交了,但是因为窗口1openGauss会话的隔离级别是可重复读,故在窗口1的openGauss会话中只能看到事务开始时的数据库数据快照,事务开始之后其他会话对表instructor的修改,在窗口1的openGauss会话中是看不到的。
对于一些报表应用,可重复读隔离级别特别重要,使用可重复读可以使报表结果总是一致的。可重复读隔离级别的实现,并不比读提交昂贵,不用担心因为采用可重复读而造成的性能问题。最后做任务的清理工作,以便继续下一个任务。首先在窗口2中清除刚才添加的行:

delete from instructor where id='88888';
commit;

然后分别在窗口1和窗口2执行gsql退出命令:

\q

相关文章:

openGauss开源数据库实战二十二

文章目录 任务二十二 使用JDBC访问openGauss数据库任务目标实施步骤一、查看和设置隔离级别1.查看系统默认的隔离级别2.设置系统默认的隔离级别3.查看当前会话的隔离级别4.设置当前会话的隔离级别5.设置当前事务的隔离级别 二、读提交隔离级别测试三、可重复读隔离级别测试 任务…...

BurpSuite解决暴力破解时需要验证码问题

学习视频来自B站UP主泷羽sec,如涉及侵权马上删除文章。 笔记只是方便学习,以下内容只涉及学习内容,切莫逾越法律红线。 安全见闻,包含了各种网络安全,网络技术,旨在明白自己的渺小,知识的广博&a…...

WPF Combox使用 Text无法选择正确获取CHange后的Text

使用固定ComboxItem 无法通过 selectitem as object 来进行回去到 Content内的对香数据。那我只能这个样干&#xff1a; private void CBPaiweiLeixingSelect_Change(object sender, SelectionChangedEventArgs e){ ComboBox ThisBox sender as ComboBox;List<EDaxiaosuixi…...

【速览】设计模式(更新中)

目录 模式的历史设计模式是什么设计原则 SOLID1. 单一职责原则&#xff08;Single Responsibility Principle, SRP&#xff09;2. 开闭原则&#xff08;Open/Closed Principle, OCP&#xff09;3. 里氏替换原则&#xff08;Liskov Substitution Principle, LSP&#xff09;4. 接…...

【stable diffusion部署】Stable Diffusion开源本地化的文生图图生图AI

前言 主要功能 文生图、图生图、图像修复、处理、合成 所有的AI设计工具&#xff0c;安装包、模型和插件&#xff0c;都已经整理好了&#xff0c;&#x1f447;获取~ 系统要求 windows 10、11系统&#xff0c;建议6G显存&#xff0c;NVIDIA显卡推荐12G显存&#xff0c;内存建…...

县城楼市踩踏式降价,或现2字头,率先回归月薪一平方的合理价格

在一二线城市都在欢呼10月份、11月份成交量回升&#xff0c;楼价回稳的时候&#xff0c;广东一些县城却先顶不住了&#xff0c;大举降价&#xff0c;显示出县城楼市房价率先回归月薪一平方的合理水平&#xff0c;这将对全国楼市产生巨大影响。 据了解这个县城的楼价此前较为稳定…...

计算机组成原理(七):二进制编码

二进制编码 二进制系统 二进制由两个数字 0 和 1 组成&#xff0c;适合数字电路中的高电平&#xff08;1&#xff09;和低电平&#xff08;0&#xff09;表示。在计算机内部&#xff0c;所有数据&#xff08;如数字、文本、图像、声音等&#xff09;最终都以二进制形式存储和…...

【GitHub分享】you-get项目

【GitHub分享】you-get 一、介绍二、安装教程三、使用教程四、配置ffmpeg五&#xff0c;卸载 如果大家想要更具体地操作可去开源网站查看手册&#xff0c;这里只是一些简单介绍&#xff0c;但是也够用一般&#xff0c;有什么问题&#xff0c;也可以留言。 一、介绍 you-get是一…...

论文概览 |《Sustainable Cities and Society》2024.12 Vol.116

本次给大家整理的是《Sustainable Cities and Society》杂志2024年12月第116期的论文的题目和摘要&#xff0c;一共包括52篇SCI论文&#xff01; 论文1 Enhancing road traffic flow in sustainable cities through transformer models: Advancements and challenges 通过变压…...

解决node.js的req.body为空的问题

从昨晚一直在试&#xff0c;明明之前用的封装的axios发送请求给其他的后端&#xff08;springboot&#xff09;是可以的&#xff0c;但昨天用了新项目的后端&#xff08;node.js&#xff09;就不行。 之前用了代理&#xff0c;所以浏览器发送的post请求不会被拦截&#xff0c;…...

Mysql学习笔记之安装

“工欲善其事&#xff0c;必先利其器”&#xff0c;这篇文章我们主要介绍Msql的安装方法。 1. 通过Docker方式安装Mysql 通过dock可以很方便的安装mysql&#xff0c;可以通过图形化界面配置各种参数&#xff0c;简介明了推荐使用dock方式安装&#xff0c;当然也可以使用命令方…...

将PDF流使用 canvas 绘制然后转为图片展示在页面上(二)

将PDF流转为图片展示在页面上 使用 pdfjs-dist 库来渲染 PDF 页面到 canvas 上&#xff0c;然后将 canvas 转为图片 安装 pdfjs-dist 依赖 npm install pdfjs-dist 或者 yarn add pdfjs-dist创建一个组件来处理 PDF 流的加载和渲染 该组件中是一个包含 PDF 文件的 ArrayBuffer…...

【深度学习】 零基础介绍卷积神经网络(CNN)

零基础介绍 卷积神经网络&#xff08;CNN&#xff0c;Convolutional Neural Network&#xff09;是深度学习中的一种神经网络&#xff0c;特别擅长处理图像和视频等有空间结构的数据。 假设我们在做一个“照片分类”的任务&#xff0c;比如判断一张照片中是猫还是狗。下面用一…...

Coze概述

### Coze概述 Coze&#xff08;中文名为扣子&#xff09;是由字节跳动开发的一个新一代AI应用开发平台&#xff0c;旨在让用户轻松创建各种AI驱动的应用和聊天机器人&#xff0c;无论用户的编程经验如何。以下是Coze的一些关键特性和功能&#xff1a; #### 关键特性 - **无代…...

康佳Android面试题及参考答案(多张原理图)

JVM 内存分布和分代回收机制是什么? JVM 内存主要分为以下几个区域。 堆(Heap)是 JVM 管理的最大的一块内存区域,主要用于存放对象实例。所有线程共享堆内存,在堆中又分为年轻代(Young Generation)和老年代(Old Generation)。年轻代又分为 Eden 区和两个 Survivor 区(…...

2022 年 3 月青少年软编等考 C 语言四级真题解析

目录 T1. 拦截导弹思路分析T2. 神奇的数列思路分析T3. 硬币思路分析T4. 公共子序列思路分析T1. 拦截导弹 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的…...

关于24年408真题的疑问

45.某计算机按字节编址&#xff0c;采用页式虚拟存储管理方式&#xff0c;虚拟地址和物理地址的长度均为32位&#xff0c;页表项的大小为4字节&#xff0c;页大小为4MB。虚拟地址结构如下&#xff1a; 这一道题如果不细想的话&#xff0c;其实是可以做对的&#xff0c;毕竟数字…...

【容器】k8s学习笔记基础部分(三万字超详细)

概念 应用部署方式演变 在部署应用程序的方式上&#xff0c;主要经历了三个时代&#xff1a; 传统部署&#xff1a;互联网早期&#xff0c;会直接将应用程序部署在物理机上 优点&#xff1a;简单&#xff0c;不需要其它技术的参与 缺点&#xff1a;不能为应用程序定义资源使…...

dayjs(2kb)和momentjs(70kb)关系详述及项目中如何选择讲解

关系 API&#xff1a;Day.js被设计为Moment.js的极简替代品&#xff0c;其API和用法与Moment.js几乎完全一致。这使得开发者在两者之间进行切换时&#xff0c;学习成本极低。 理念&#xff1a; Moment.js是一个大而全的时间日期库&#xff0c;提供了丰富的日期时间操作方法&am…...

【Python网络爬虫笔记】11- Xpath精准定位元素

目录 一、Xpath 在 Python 网络爬虫中的作用&#xff08;一&#xff09;精准定位元素&#xff08;二&#xff09;应对动态网页&#xff08;三&#xff09;数据结构化提取 二、Xpath 的常用方法&#xff08;一&#xff09;节点选取&#xff08;二&#xff09;谓词筛选&#xff0…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...