【MySQL学习笔记009】事务

一、事务简介

        事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。

二、事务操作

1、操作1

        查看/设置事务提交方式

                select @@autocommit; 输出为1 --自动提交,0--手动提交

                set @@autocommit=0;

        提交事务

                commit;

        回滚事务

                rollback;

2、操作2

        开启事务

                start transaction 或 begin;

        提交事务

                commit;

        回滚事务

                rollback;

三、事务四大特性

        原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败;

        一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。

        隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行。

        持久性(Durability):事务一旦提交或回滚,它对数据库中的数据改变就是永久的。

四、并发事务问题

五、事务隔离等级

        -- 查看事务隔离级别

                select @@transaction_isolation;

        -- 设置事务隔离级别

                set [session | global ] transaction isolation level [ read uncommitted | read committed | repeatavle read | serializable ]

        注意:事务的隔离级别越高,性能越低。

六、案例

        打开两个命令符窗口

        登录数据库 mysql -u root -p,切换到练习数据库use pra;

        开启事务 start transaction

        先查询一下表中数据 select * from account;

        在第一个命令符窗口中设置事务隔离级别为read uncommitted——>set session transaction isolation level read uncommitted;

        然后在第二个命令符窗口中输入命令:update account set money = money - 1000 where name = '张三'; 因为目前是开启的事务模式,所以不提交数据库是不会进行相关操作;但是在第一个命令符窗口中执行:select * from account; 会发现account表中的数据已经被修改,这就是脏读现象。

        若在第一个命令符窗口中执行set session transaction isolation level read committed;即设置事务隔离级别为read committed,重复以上操作,则不会出现脏读现象。

        设置read committed,解决脏读问题后,但是不能解决不可重复读现象。开启事务 start transaction(两个窗口),第一个窗口执行 select * from account; 然后第二窗口执行 update account set money = money + 1000 where name = '张三';,但是不执行提交,然后在第一个窗口再次执行 select * from account;发现两次查询结果一样,然后第二个窗口执行提交,第一个窗口执行查询,结果发现变化,这就是不可重复读。

        将事务隔离级别设置为repeatable read,重复上述操作,可实现重复读取。

        然而,repeatable read 隔离级别,无法解决幻读现象,开启事务 start transaction(两个窗口),第一个窗口执行select * from account where id = 3;返回空值,然后在第二个窗口执行 insert into account (id, name, money) values (3, '王五', 2000);,提交。再用第一个窗口查询,同样返回空值,然后再用第一个窗口执行插入命令 insert into account (id, name, money) values (3, '大刀王五', 2000); 返回error报错account中主键3重复,那么再次查询主键为3的数据,返回依然没有值。这种现象就是幻读。

        幻读现象可以使用serializable(串行化)隔离级别解决。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习中用来训练的train.py 探究学习2.0( 数据预处理)

数据预处理 下列代码为train.py中常见的一些数据处理方法 train_transform transforms.Compose([transforms.Resize((224, 224)),transforms.RandomVerticalFlip(),# 随机旋转,-45度到45度之间随机选transforms.RandomRotation(45),# 从中心开始裁剪transforms.C…

Python实验:关灯游戏

文章目录 前言一、设计表二、关键代码三、运行结果小地图,容易难度:中地图,中等难度:大地图,困难难度: 四、完整代码链接总结 前言 这是一个Python实验作业,内容如下: 题目要求&am…

游戏软件提示d3dcompiler_43.dll的五个解决方法,亲测靠谱

在使用电脑进行工作,玩游戏的时候,我们常常会遇到一些错误提示,其中之一就是“D3DCompiler_43.dll丢失”的提示。D3DCompiler_43.dll是一个非常重要的动态链接库文件。它是由DirectX SDK提供的,用于编译和优化DirectX着色器代码的…

CnosDB:深入了解时序数据处理函数

CnosDB 是一个专注于时序数据处理的数据库,旨在解决时序数据存储与分析问题,为用户提供高效的时序数据管理与查询便利。为了实现这一目标,CnosDB 实现了一系列专用函数,快来和CC一起来看看吧! CnosDB:深入了…

进程间通信---信号

什么是信号? 】 信号处理流程 信号类型 发送信号的函数 参数sig:代表 信号 接收信号的函数 参数 handle 的处理方式有几种? 实例代码 实例逻辑 图中的等待操作使用:pause()函数 代码 在这里插入代码片…

区域摇杆制作

区域摇杆 介绍界面制作脚本总结 介绍 我之前讲过摇杆,那么看到现在游戏做区域摇杆的更多一些,那么我们来剖析一下。说白了区域摇杆就是在之前固定摇杆的基础上增加了一个启动事件,当我们开始拖拽的时候,我们将摇杆现实启动然后位…

uniapp cli开发和HBuilderX开发

uniapp cli开发和HBuilderX开发 前言 uniapp是一个跨平台的开发框架,可以开发出微信小程序、支付宝小程序、百度小程序、头条小程序、H5、App等,开发者只需要写一套代码,就可以发布到各个平台,大大提高了开发效率。 uniapp的开…

动态规划系列 | 最长上升子序列模型(上)

文章目录 最长上升子序列回顾题目描述问题分析程序代码复杂度分析 怪盗基德的滑翔翼题目描述输入格式输出格式 问题分析程序代码复杂度分析 登山题目描述输入格式输出格式 问题分析程序代码复杂度分析 合唱队形题目描述输入格式输出格式 问题分析程序代码复杂度分析 友好城市题…

驾驶未来:百度Apollo自动驾驶技术的探索与实践(文末赠送apollo周边)

🎬 鸽芷咕:个人主页 🔥 个人专栏:《linux深造日志》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 粉丝福利活动 ✅参与方式:通过连接报名观看课程,即可免费获取精美周边 ⛳️活动链接&#xf…

改进YOLOv8注意力系列三:结合CrissCrossAttention、ECAAttention、EMAU期望最大化注意力

改进YOLOv8注意力系列三:结合CrissCrossAttention、ECAAttention、EMAU期望最大化注意力 代码CrissCrossAttention注意力ECAAttention通道注意力EMAU期望最大化注意力加入方法各种yaml加入结构本文提供了改进 YOLOv8注意力系列包含不同的注意力机制以及多种加入方式,在本文中…

【5G PHY】NR参考信号功率和小区总传输功率的计算

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…

什么是网站监控?

网站监控是跟踪网站的可用性和性能,以最小化宕机时间,优化性能并确保顺畅的用户体验。维护网站正常运行对于任何企业来说都是至关重要的,因而对大多数业务来说,网站应用监控都是一个严峻的挑战。Applications Manager网站应用监控…

2024年【金属非金属矿山安全检查(地下矿山)】模拟试题及金属非金属矿山安全检查(地下矿山)模拟考试题

题库来源:安全生产模拟考试一点通公众号小程序 金属非金属矿山安全检查(地下矿山)模拟试题参考答案及金属非金属矿山安全检查(地下矿山)考试试题解析是安全生产模拟考试一点通题库老师及金属非金属矿山安全检查&#…

C++系列第九篇 数据类型下篇 - 复合类型(指针高级应用)

系列文章 C 系列 前篇 为什么学习C 及学习计划-CSDN博客 C 系列 第一篇 开发环境搭建(WSL 方向)-CSDN博客 C 系列 第二篇 你真的了解C吗?本篇带你走进C的世界-CSDN博客 C 系列 第三篇 C程序的基本结构-CSDN博客 C 系列 第四篇 C 数据类型…

redis基本用法学习(C#调用FreeRedis操作redis)

FreeRedis属于常用的基于.net的redis客户端,EasyCaching中也提供适配FreeRedis的包。根据参考文献4中的说法,FreeRedis和CsRedis算是近亲(都是GitHub中账号为2881099下的开源项目),因此其用法特别相似。FreeRedis的主要…

MoveIt!生成的机器人**_moveit_config包中config文件和launch文件

MoveIt!生成的机器人**_moveit_config包中config文件和launch文件 MoveItconfig文件srdfcartesian_limits.yamljoint_limits.yamlfake_controllers.yamsimple_moveit_controllers.yamlgazebo_controllers.yaml1. ros_controllers.yamlkinematics.yamlsensors_3d.yamlompl_plann…

【Qt之Quick模块】6. QML语法详解_1 基础语法与三种导入语句

前言 通过以上1-5文档的介绍,Quick与QML的概念及QML语法、类型、文件作用等已叙述个大概,接下来是对QML语法进行展开来说。 其实,学习任何一门语言或者做任何一件事情,并不用一开始就要求尽善尽美,做个无懈可击&…

vue3组件通信(父给子传参,子调用父的方法,父调用子的方法,顶层组件给底层组件传参,底层组件调用顶层组件的方法)

目录 1.父传子(父给子传参) 2.子传父(子调用父的方法) 3.父调用子的方法 4.顶层给底层传参,底层调用顶层的方法 5.模板引用 1.父传子(父给子传参) ①.步骤 父组件中给子组件通过绑定属性…

收银管理系统怎样帮助商家很好地经营服装门店

收银管理系统对于服装门店的经营可以提供多方面的帮助,以下是一些具体的优势和功能: 1. 快速准确的收银:收银管理系统可以实现快速、准确的收银操作,通过条码扫描或手动输入商品信息,自动计算价格并生成收据。这样可以…

nacos配置中心配置已经常见错误总结

💻目录 前言1、基础架构2、依赖3、配置文件3.1、bolg-product配置文件3.1.1、application.yml配置文件3.1.2、bootstrap.yml配置文件3.1.3、nacos远程配置 3.2、bolg-system3.1.1、application.yml配置文件3.1.2、bootstrap.yml配置文件3.2.3、nacos远程配置 4、测试…