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

mysql学习-事务隔离级别

1、事务概述

用户定义的一些列操作,将多个sql语句视为一个整体去执行,这些语句要么全部执行成功了,要么全部不执行。事务对于保证数据的一致性和完整性至关重要,尤其在多个用户对数据库进行并发操作。如果只有一个客户端连接操作mysql,就没必要讨论事务了。

2、如何告诉mysql是事务语句

begin/commit(begin和commit之间的语句,被视为事务)
begin/rollback(begin和rollback之间的语句,被视为回滚事务)

2、MySQL支持四种标准的事务隔离级别

2.1、read uncommit(读未提交)

最低隔离级别,允许一个事务读取其他事务未提交的数据。这会导致脏读、不可重复读、幻读问题。

设置隔离级别sql语句:

set transaction isolation level read uncommitted;

脏读

右侧客户端开启事务,插入数据,但未commit;
左侧客户端开启事务,却能读到右侧客户端未提交的事务数据;
相当于一个mysql客户端,读取到另一个客户端事务执行中间的结果。

【解决脏读】

可以升级隔离级别到read commit

2.2、read commit(读已提交)

一个事务只能读取其他事务已经提交的数据,可以防止脏读,但无法避免不可重复读和幻读

设置隔离级别sql语句:

set transaction isolation level read committed;

不可重复读

右侧客户端开启事务,2次查询name为test1的age,是不一样的结果。
相当于在一个事务内,查询某个值,俩次结果不同,不符合预期。
原因:第二次读取的时候,读到了其他事务提交的结果。

【解决不可重复读】

可以升级隔离级别到 repeatable read

2.3、repeatable read(可重复读,mysql的默认级别)

这是MySQL的InnoDB存储引擎默认的隔离级别。它确保在同一事务内的多次读取同样的数据行时,即使其他事务修改了这些数据行,也不会影响当前事务的读取结果。这可以防止脏读和不可重复读,但幻读仍可能发生。

幻读

右侧客户端开启事务,先查询了下id>4的数据,然后插入一条新数据,但是报错了。
原因:左侧客户端开启事务,并且已经插入了这条新数据commit;
所以会出现,右侧客户端以为可以插入新数据,但是插入数据又报错了。

[解决办法]

给读操作加锁(for update),右侧客户端会阻塞等待左侧客户端事务完成。

select * from student_info where id > 4 for update;

2.4、serializable(可串行化)

最高的隔离级别,完全串行化处理,事务一个接一个地执行,可以防止所有并发引起的问题,包括脏读、不可重复读和幻读,这个效率也是最低的。

学习链接:https://github.com/0voice

相关文章:

  • 文件IO 2
  • 计算机科学技术研究者文献数据库推荐
  • 树莓派5 外设GPIO使能 PWM
  • DaVinci Resolve19.1下载:达芬奇调色中文版+安装步骤
  • 服务器ubuntu22.04上安装tiny-cuda-nn
  • STM32 + keil5 跑马灯
  • 深入理解 Apache Dagster:数据管道编排实战指南
  • 系统调用与中断
  • 鸿蒙学习手册(HarmonyOSNext_API16)_应用开发UI设计:Swiper
  • Swoole 的 Hyperf 框架和 Go 的 Gin 框架高并发原理以及技术实现对比分析
  • [C++面试] 智能指针面试点(重点)续4
  • 动手学深度学习:AlexNet
  • 从基础到实践(二十三):MCU选型设计指南
  • 避坑,c#开发人员学习开发app时.NET MAUI和Vue3 选择
  • 青少年编程与数学 02-013 初中数学知识点 04课题、图形与几何
  • 洛谷题单2-P1424 小鱼的航程(改进版)-python-流程图重构
  • [NCTF2019]Fake XML cookbook [XXE注入]
  • 第八部分:进程创建退出等待和替换
  • 深入探究C语言中的二进制世界:从原理到实践
  • 国产数据库突围,要过“生态关”
  • 以安全部门确认哈马斯加沙地带军事部门领导人被打死
  • 云南旅游市场10条措施征求意见:对强制诱导购物等吊销导游证的不得再次核发
  • 换灯如换脸!西安碑林整修重开观展体验提升
  • 上海普陀:原则同意将工业河更名为同济湾河
  • 菲律宾华人“钢铁大王”撕票案两主谋被捕,部分赎金已被提取
  • 网约车司机猝死,平台和保险公司均拒绝赔偿,法院判了