MySQL之基础事务和隔离级别

目录

引言:

什么是事务?

事务和锁

mysql数据库控制台事务的几个重要操作指令(transaction.sql)

1、事物操作示意图:

2.事务的隔离级别 

四种隔离级别:

总结一下隔离指令

1. 查看当前隔离级别​​

2.设置隔离级别​​

​​(1) 设置当前会话(临时生效)

​​(2) 设置全局(需管理员权限)​​

3.修改默认级别

3.ACID 特性

1.原子性 (Atomicity)​​

​​2. 一致性 (Consistency)​​

​​3. 隔离性 (Isolation)​​

​​4. 持久性 (Durability)​​


​类别​​SQL 语句示例​​作用​
​DML​INSERTUPDATEDELETE​操作数据​​(增删改查)
​DDL​CREATEALTERDROP​定义数据库结构​​(如表、索引、视图等)
​DCL​GRANTREVOKE​控制访问权限​
​TCL​COMMITROLLBACK​管理事务​

引言:

  • 什么是事务?

事务就是用于保证数据的一致性,她由一组相关的dml语句组成,该组的dml语句要么全部成功,要么全部失败。如:转账就必须保证事务的一致性。

比如我这里有两个指令:

-- 转账人
update balance set balance=balance-100 where id = 1--收款人
update balance set balance=balance+100 where id = 2

 如何保证两条语句同时执行成功?

  • 事务和锁

当执行操作(dml语句) ,mysql会在表上加锁,防止其他用户修改表的数据,这对用户来说是非常重要的

  • mysql数据库控制台事务的几个重要操作指令(transaction.sql)

1.start transaction --开启一个事务

2.savepoint 自定义保存点的名称 --设置保存点

3.rollback ro 自定义保存点名称 --回退事务

4.rollback --回退全部事务,回到事务开始的时候

5.commit --提交事务,结束事务,删除该事务的所有保存点,删除锁,不能回退,数据生效,其他会话[其他连接]可以查看生效的新数据

1、事物操作示意图:

类似于git的回滚操作

用户a在进行事务操作的时候,用户b在数据库是查看不到一部分数据的变化的,必须要等到用户a提交才行,这叫事务隔离,至于是看得见哪一部分的数据得取决于用的隔离级别

还有一种开启事务的方式:set autocommit = off

-- 关闭当前会话的自动提交(影响后续所有操作)
SET autocommit = 0;
INSERT INTO orders (product_id) VALUES (101);
-- 必须显式提交
COMMIT;
-- 恢复自动提交(否则后续操作仍需要手动提交)
SET autocommit = 1;

2.事务的隔离级别 

1.多个连接开启各自事务操作数据库中的数据时,数据库系统要负责隔离操作,以保证连接在获取数据的准确性

2.如果不考虑隔离性,会导致:脏读、不可重复读、幻读

脏读:当应一个事务读取另外一个事务尚未提交的修改时,产生脏读。就是也可能别人回滚了或者放弃提交了,但是你读到了。

不可重复读:同一个查询在同一个事务中多次进行,由于其他用户提交的事务所做的修改或者删除,每次返回不同的结果集,此时发生不可重复读

幻读:同一个查询在同一个事务中多次进行,由于其他用户提交事务所作的插入操作,每次返回不同的结果集

四种隔离级别:

1.读未提交 read uncommitted

2.读已提交 read committed

3.可重复读 repeatable read

4.可串行化 serializable

测试一下功能:

打开两个操作台a和b

 指令1:查询当前mysql的隔离级别

select @@tx_isolation;
或者
SELECT @@transaction_isolation;

会得到一个可重复读的隔离级别

指令2:修改一下这个用户a的隔离级别为读未提交

set session transaction isolation level read uncommitted;

设置成功 

我们来对比一下:

此时用户a执行一个语句,还没有commot,但是用户b也能看见,这就是脏读

其他情况也是类似,可以自行下去动手查看

那这些脏读、不可重复读、幻读我们都理解了,那锁呢?

当用户a开启事务之后插入更新了一些数据

那么用户b持有可串行化的隔离级别,是什么情况:

答案是按回车之后被卡住,这个用户b会一直等待连接到这个数据库

这时候就有两种情况:

1.超时:

2.用户a提交了,用户b才出现结果 

总结一下隔离指令

1. 查看当前隔离级别​
-- 查看当前会话的隔离级别
SELECT @@SESSION.transaction_isolation;-- 查看全局隔离级别
SELECT @@GLOBAL.transaction_isolation;
2.设置隔离级别​
​(1) 设置当前会话(临时生效)
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;  -- 读未提交
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;    -- 读已提交
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;    -- 可重复读(默认)
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;      -- 串行化
​(2) 设置全局(需管理员权限)​
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;  -- 修改全局配置
FLUSH PRIVILEGES;  -- 刷新权限(可选)

3.修改默认级别

3.ACID 特性

原子性 (Atomicity) → 确保操作完整性
一致性 (Consistency) → 确保数据有效性
隔离性 (Isolation) → 确保并发可控性
持久性 (Durability) → 确保结果永久性

1.原子性 (Atomicity)​
  • ​定义​​:事务是最小的工作单元,不可再分割。
  • ​核心原则​​:事务中的操作​​要么全部成功,要么全部失败回滚​​。
  • ​示例​​:银行转账中,扣款和收款必须同时成功或同时失败。

​2. 一致性 (Consistency)​
  • ​定义​​:事务执行前后,数据库必须从一个一致性状态变换到另一个一致性状态。
  • ​核心原则​​:数据完整性约束(如主键、外键、唯一约束)不会被破坏。
  • ​示例​​:转账前后,双方账户总额应保持不变。

​3. 隔离性 (Isolation)​
  • ​定义​​:多个并发事务之间相互隔离,一个事务的操作不应影响其他事务。
  • ​核心原则​​:通过隔离级别(如 READ COMMITTED)控制事务间的可见性。
  • ​问题规避​​:避免脏读、不可重复读、幻读等问题。

​4. 持久性 (Durability)​
  • ​定义​​:事务一旦提交,对数据的修改就是永久性的。
  • ​核心原则​​:即使系统崩溃,数据也能通过日志恢复。
  • ​实现机制​​:依赖事务日志(如 InnoDB 的 redo log)。

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

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

相关文章

学习记录:DAY29

项目开发日志:技术实践与成长之路 前言 回顾这几天的状态,热情总是比我想象中更快被消耗完。比起茫然徘徊的小丑,我更希望自己是对着风车冲锋的疯子。 今天继续深入项目的实际业务。 状态好点的时候,再看自己EMO时写的东西&…

kotlin Android AccessibilityService 无障碍入门

安卓的无障碍模式可以很好的进行自动化操作以帮助视障人士自动化完成一些任务。 无障碍可以做到,监听屏幕变化,朗读文本,定位以及操作控件等。 以下从配置到代码依次进行无障碍设置与教程。 一、配置 AndroidManifest.xml 无障碍是个服务…

【Vue篇】数据秘语:从watch源码看响应式宇宙的蝴蝶效应

目录 引言 一、watch侦听器(监视器) 1.作用: 2.语法: 3.侦听器代码准备 4. 配置项 5.总结 二、翻译案例-代码实现 1.需求 2.代码实现 三、综合案例——购物车案例 1. 需求 2. 代码 引言 💬 欢迎讨论&#…

WPS中代码段的识别方法及JS宏实现

在WPS中,文档的基本结构可以通过对象模型来理解: (1)Document对象:表示整个文档 (2)Range对象:表示文档中的一段连续区域,可以是一个字符、一个句子或整个文档 &#…

el-tree结合el-tree-transfer实现穿梭框里展示树形数据

参考文章&#xff1a;我把他的弹框单拉出来一个独立文件作为组件方便使用&#xff0c;遇到一些问题记录一下。 testComponet.vue <template><div class"per_container"><div class"per_con_left"><div class"per_con_title&q…

Go 后端中双 token 的实现模板

下面是一个典型的 Go 后端双 Token 认证机制 实现模板&#xff0c;使用 Gin 框架 JWT Redis&#xff0c;结构清晰、可拓展&#xff0c;适合实战开发。 项目结构建议 /utils├── jwt.go // Access & Refresh token 的生成和解析├── claims.go // 从请求…

Typescript学习教程,从入门到精通,TypeScript 对象语法知识点及案例代码(7)

TypeScript 对象语法知识点及案例代码 TypeScript 是 JavaScript 的超集&#xff0c;提供了静态类型检查和其他增强功能。在 TypeScript 中&#xff0c;对象是面向对象编程&#xff08;OOP&#xff09;的基础。 一、对象概述 在 TypeScript 中&#xff0c;对象是属性的集合&a…

应用BERT-GCN跨模态情绪分析:贸易缓和与金价波动的AI归因

本文运用AI量化分析框架&#xff0c;结合市场情绪因子、宏观经济指标及技术面信号&#xff0c;对黄金与美元指数的联动关系进行解析&#xff0c;揭示本轮贵金属回调的深层驱动因素。 周三&#xff0c;现货黄金价格单日跌幅达2.1%&#xff0c;盘中触及3167.94美元/盎司关键价位&…

命令行登录 MySQL 报 Segmentation fault 故障解决

问题描述&#xff1a;对 mysql8.0.35 源码进行 make&#xff0c;由于一开始因为yum源问题少安装依赖库 库&#xff0c;在链接时遇到错误 undefined reference to&#xff0c;后来安装了相关依赖库&#xff0c;再次 make 成功。于是将 mysqld 启动&#xff0c;再用 mysql -u roo…

Axure设计数字乡村可视化大屏:构建乡村数据全景图

今天&#xff0c;让我们一同深入了解由Axure设计的数字乡村可视化大屏&#xff0c;看看它如何通过精心的布局和多样化的图表类型&#xff0c;将乡村的各类数据以直观、易懂的方式呈现出来&#xff0c;为乡村管理者提供有力的数据支持。 原型效果预览链接&#xff1a;Axure数字乡…

3D个人简历网站 4.小岛

1.模型素材 在Sketchfab上下载狐狸岛模型&#xff0c;然后转换为素材资源asset&#xff0c;嫌麻烦直接在网盘链接下载素材&#xff0c; Fox’s islandshttps://sketchfab.com/3d-models/foxs-islands-163b68e09fcc47618450150be7785907https://gltf.pmnd.rs/ 素材夸克网盘&a…

智能开发工具PhpStorm v2025.1——增强AI辅助编码功能

PhpStorm是一个轻量级且便捷的PHP IDE&#xff0c;其旨在提高用户效率&#xff0c;可深刻理解用户的编码&#xff0c;提供智能代码补全&#xff0c;快速导航以及即时错误检查。可随时帮助用户对其编码进行调整&#xff0c;运行单元测试或者提供可视化debug功能。 立即获取PhpS…

Spark 的运行模式(--master) 和 部署方式(--deploy-mode)

Spark 的 运行模式&#xff08;--master&#xff09; 和 部署方式&#xff08;--deploy-mode&#xff09;&#xff0c;两者的核心区别在于 资源调度范围 和 Driver 进程的位置。 一、核心概念对比 维度--master&#xff08;运行模式&#xff09;--deploy-mode&#xff08;部署…

sqli—labs第八关——布尔盲注

一&#xff1a;确定注入类型 按照我们之前的步骤来 输入 ?id1 and 11-- ?id1 and 12-- 界面正常 第二行界面异常空白 所以注入类型为单引号闭合型 二&#xff1a; 布尔盲注 1.判断是否使用条件 &#xff08;1&#xff09;&#xff1a;存在注入但不会直接显示查询结果 …

ARP 原理总结

&#x1f310; 一、ARP 原理总结 ARP&#xff08;Address Resolution Protocol&#xff09;是用于通过 IP 地址解析 MAC 地址的协议&#xff0c;工作在 链路层 与 网络层之间&#xff08;OSI 模型的第三层与第二层之间&#xff09;。 &#x1f501; ARP通信过程&#xff1a; …

SpringCloud——EureKa

目录 1.前言 1.微服务拆分及远程调用 3.EureKa注册中心 远程调用的问题 eureka原理 搭建EureKaServer 服务注册 服务发现 1.前言 分布式架构&#xff1a;根据业务功能对系统进行拆分&#xff0c;每个业务模块作为独立项目开发&#xff0c;称为服务。 优点&#xff1a; 降…

机顶盒刷机笔记

疑难杂症解决 hitool线刷网口不通tftp超时--》关闭防火墙cm201-2卡刷所有包提示失败abort install--》找个卡刷包只刷fastboot分区再卡刷就能通过了&#xff08;cm201救砖包 (M8273版子&#xff09;&#xff09; 刷机工具 海兔烧录工具HiTool-STB-5.3.12工具&#xff0c;需要…

Linux动静态库制作与原理

什么是库 库是写好的现有的&#xff0c;成熟的&#xff0c;可以复用的代码。现实中每个程序都要依赖很多基础的底层库&#xff0c;不可能每个人的代码都从零开始&#xff0c;因此库的存在意义非同寻常。 本质上来说库是一种可执行代码的二进制形式&#xff0c;可以被操作系统…

如何通过小智AI制作会说话的机器人玩具?

一、硬件准备与组装 1. 核心硬件选择 主控芯片&#xff1a;选择支持无线网络连接、音频处理和可编程接口的嵌入式开发板 音频模块&#xff1a;配备拾音麦克风与小型扬声器&#xff0c;确保语音输入/输出功能 显示模块&#xff1a;选择适配的交互显示屏用于可视化反馈 扩展模…

如何控制邮件发送频率避免打扰用户

一、用户行为 监测用户与邮件的互动数据&#xff0c;如打开率、点击率下滑或退订申请增多&#xff0c;可能是发送频率过高的警示信号。利用邮件营销平台的分析工具&#xff0c;识别这些指标的变动趋势&#xff0c;为调整提供依据。 二、行业特性与受众差异 不同行业用户对邮…