[数据库]数据库事务,管理等级,并发锁

news2024/12/23 19:02:04

1.数据库事务

数据库事务(transaction)是数据库的特性之一,在mysql数据库管理系统中,事务的管理是由引擎innordb实现的.

数据库事务可以理解为一个阶段中的活动,对于每一个窗口都有一个日志,日志中记录着本次事务中进行的改动(注意只是改动,查询不算).其中的两个指令commit,以及rollback都是将日志清空

commit:提交以后,清空日志,并把日志修改的内容进行持久化保存

rollback:清空日志,但是不会保存日志修改的内容,会回到事务开始之前的状态

(注)在mysql中,事务是默认提交的,如果想要使用可控的事务,需要使用

start transaction

来开启一个指令,然后使用commit或者rollback来结束事务

2.事务的隔离等级

transaction(事务) 事务有四种隔离等级,这个隔离等级指的是,在进行并发访问的时候,读取到数据的多少 注意,测试的时候尽量让两个事务全都关闭自动提交,会更加明显一点

1.read uncommitted:可以读取非提交的内容 例如事务a,刚刚完成了一个DML操作但是还没有commit,这个时候另一个事务b是可以select到这个数据的 几乎可以认为是没有任何隔离,完全同步

2.read committed:读取提交内容 顾名思义,只有完成了提交,才能在别的事务里面查询到 例如事务a,刚刚完成了一个DML操作但是还没有commit,这个时候另一个事务b是查不到这个数据(a自身可以) 除非是a进行了commit,清空了这次的日志,b事务才能查询到

3.repeatable read:可重复读取/读取的是幻影数据 比如事务a在进行着各种增删改的操作,这时候事务b开始,读取数据 会发现无论a怎么改动怎么提交,b所能查询到的仅仅是b在start的那一瞬间,a已经commit的数据 要想b读到新的数据,就要停止b事务,然后重开b事务 举个例子就是:每天晚上五点钟银行查库,职员们统计这个时间点的钱数,如果在这之后有人来存钱取钱 职员们统计的数字都不会变化(废话,一变全都乱套了)

4.serializable,序列化 你不允许参加impart

另外补充,mysql,oracle等dbms的默认事务隔离等级是read committed

隔离等级的修改方法为:

  1. 进入mysql的ini文件中找到transaction-isolation=?,修改隔离等级

  2. 修改当前会话(窗口)隔离级别: 使用语句set session transaction_isolation ='level';

  3. 修改当前系统隔离界别:使用语句 set global transaction_insolation='level';

  4. 隔离等级在修改的时候要大写

  5. 获取事务隔离等级 select @@global.transaction_isolation(系统)

  6. 获取事务隔离等级select @@session.transaction_isolation;(当前会话)

3.关于锁机制

这个情况通常发生在两个窗口同时访问数据库的时候

如果都没有发生修改操作,仅仅是查询一些数据,则不会有任何影响

只有一方要修改数据的时候也是一样

但问题就出在,如果两个窗口都想要修改数据,怎么办

众所周知,每个窗口都自带一个窗口管理日志,在窗口单独进行commit和rollback的时候,都不会影响到彼此的窗口

但如果一个窗口中进行了一次修改操作,则另一个窗口执行该操作的时候,就会进入锁等待状态(阻塞状态)

所谓锁等待状态,就是将要执行的指令暂时挂起在日志区中

等到另一个窗口完成了当前事务,才会继续执行这个指令,具有延时性

举个例子(假设AB两个窗口此刻都开启了事务)

 

简而言之就是:当修改内存冲突的时候,会先把命令挂起,等待其他窗口修改并且完成提交以后,才能进行这个指令的草坪做

并且再挂起的阶段中,无法再该窗口执行指令

其实做一做go语言的开发就能发现,这其实就是lock,或者叫临界区的操作

暂时阻塞其他窗口的动作,但不是屏蔽

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

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

相关文章

ffplay设置延时

目录 理论 实验 不带参数 带参数 理论 使用ffplay播放视频源时,rtsp/rtmp等,会有一定的延时,这里我们可以通过设置ffplay播放参数将延时控制到最小。 ffplay.exe -i rtmp://xxxxxxx -fflags nobuffer 减少缓冲 也可以减少分析码流的时间…

chatgpt赋能python:Python就业岗位分析:机遇和挑战并存

Python就业岗位分析:机遇和挑战并存 Python是一种高级编程语言,它具有易于学习、易于阅读和维护的特点。自问世以来,Python一直是最受欢迎的编程语言之一,用于各种领域的开发、数据分析和科学计算等方面,因此Python岗…

【AI工具】 一款多SOTA模型集成的高精度自动标注工具(直接安装使用,附源码)

目录 高精度自动标注工具简介及其特性标注工具的安装开启自动标注 简介 X-AnyLabeling 是一款全新的交互式自动标注工具,其基于AnyLabeling进行构建和二次开发,在此基础上扩展并支持了许多的模型和功能,并借助Segment Anything和YOLO等主流…

Abp Vnext 搭建 ELK日志记录

ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana 安装 Elasticsearch Kibana 的方法我前面文章有写 Abp中加入Logstash Serilog.AspNetCore Serilog.Formatting.Elasticsearch Serilog.Sinks.Async Serilog.Sinks.Elasticsearchp…

算法与数据结构(四)

一、哈希表 1、哈希表在使用层面上可以理解为一种集合结构 2、如果只有key,没有伴随数据value,可以使用HashSet结构(C中叫UnOrderedSet) 3、如果既有key,又有伴随数据value,可以使用HashMap结构(C中叫UnOrderedMap) 4、有无伴随数…

【C++】4.多媒体库:SFML库入门

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍SFML库使用。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习知识,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路&#…

新能源车加速内卷,下一程拼什么

近日,一则长城汽车举报比亚迪的消息,瞬间刷爆了整个汽车圈,行业外对于这个事情多少有点懵,但业内对此却并不感到意外。如果说去年前年国内新能源汽车的“较量”,还是争夺入选资格的话,如今这种级别的“较量…

TensorFlow2进行CIFAR-10数据集动物识别,保存模型并且进行外部下载图片测试

首先,你已经安装好anaconda3、创建好环境、下载好TensorFlow2模块并且下载好jupyter了,那么我们就直接打开jupyter开始进行CIFAR10数据集的训练。 第一步:下载CIFAR10数据集 下载网址:http://www.cs.toronto.edu/~kriz/cifar-10…

【Vue.js】对Vue-element-admin做代理网关转发proxy配置

文章目录 环境配置配置vue.config.js演示为啥要这么做呢? 环境配置 .env.development # 开发环境 .env.production # 生产环境我们需要在两个环境变量文件中配置 VUE_APP_BASE_API /dev # 这里配置全局的API前置标识 开发环境我使用的/dev 生产环境用的是/prod V…

Word控件Spire.Doc 【其他】教程(8):在 Word 中嵌入多媒体文件

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下,轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具,专注于创建、编辑、转…

物联网开发中常用的几款传感器

传感器是物联网中的关键部件,在物联网开发中发挥着重要作用。目前,市场上的传感器种类繁多,它们有许多用途。有些传感器可能主要用于测量温度、压力、流量等物理量,有些则用于测量位置、距离、速度和加速度等物理量,还…

干货第一弹!多组学联合分析之代谢组FAQ

代谢组是对生物体内代谢产物全谱分析的一种研究手段,代谢产物包括核酸、蛋白质、脂类生物大分子以及其他小分子物质,目前主要是检测1000Da以下的物质。代谢组研究具有高通量的检测能力、高灵敏度和准确度、非侵入性、非破坏性、全面性、数据资源整合等特…

DIY制作隔离信号注入变压器

最近在学习模电知识,接触到了测量运放环路增益,需要使用合适的注入变压器,查找资料发现商用信号注入变压器价格昂贵,不适合个人学习使用。看到LOTO使用普通音频变压器做测试,也跟技术群友做了交流,尝试使用…

企业构建高性能Web应用的重要组件

目 录 01 出现背景 ‍‍‍‍‍‍‍ 02 PrimetonLB、PrimetonMemDB在高性能Web应用中的作用 03 与PAS的集成‍‍ 04 优势体现 05 总结 01 出现背景‍ 随着互联网的快速发展和普及,各类Web应用已成为人们日常生活的重要组成,人们对Web应用的要求从过去的…

使用QMenu和mousePressEvent制作右键弹出菜单

我需要实现一个在QTextBrowser上邮件弹出菜单的效果,如下所示: 创建QTextBrowser的子类MyTextBrowser 首先创建一个QTextBrowser的子类,MyTextBrowser,如下所示:并定义一个QMenu指针 #ifndef MYTEXTBROWSER_H #defin…

webpack打包处理字体图标、map4、map3、avi资源

一、字体图标资源的下载(阿里巴巴图标库) iconfont官网:https://www.iconfont.cn/ 这里你可以搜索你想要的字体图标,或者选择官方的图标库中查找,我这里就以官方的图标库为例: 选择几个加入购物车 点…

关于libc++_shared.so 与libstdc++、libc++的链接关系

问题点1: -lstdc 与libc_shared.so的关联; 当在makefile中引入-lstdc时,其意味着调用动态库libstdc.so, Note:动态库libstdc.so 所对应的静态库是libstdc.a; Note:当前测试libstdc.so来自于Android12的./prebuilts/gcc/linux-x86/host/x8…

图数据库实践 - 如何将图数据库应用于供应链管理

导读 当前,随着全球化的加速和供应链的复杂性增加,供应链风险管理已经成为企业日常运营中不可忽视的重要方面。由于自然灾害、贸易保护、供应商更迭等因素的影响,供应链中的任何一个环节出现问题都可能导致生产中断、物流延误、成本增加&…

结构型设计模式06-桥接模式

🧑‍💻作者:猫十二懿 ❤️‍🔥账号:CSDN 、掘金 、个人博客 、Github 🎉公众号:猫十二懿 桥接模式 1、桥接模式模式介绍 桥接模式(Bridge Pattern)是一种结构型模式之一…

ssm+java+mysql在线捐赠系统

本系统实现一个在线捐赠系统,分为用户和管理员两种用户。具体功能描述如下: 后台管理员模块包括: 1. 系统用户管理:此功能为超级管理员所有,普通管理员没有此权限,实现超级管理员可以对普通管理员信息的…