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

MySQL 事务的隔离级别

MySQL 事务的隔离级别

文章目录

  • MySQL 事务的隔离级别
    • 1. 并发事务问题
    • 2. 事务的隔离级别

1. 并发事务问题

当存在多个事务对同一个数据库进行并发数据操作时,可能会出现下述几个问题:

  • 脏读:一个事务读取到了另一个事务还未提交的数据;
  • 不可重复读:一个事务中先后读取同一条记录,但两次读取操作读取到的数据并不一致(中间可能有另一个事务对这条记录进行了数据修改);
  • 幻读:一个事务先执行了读取操作,在发现记录不存在后准备将这条数据插入数据库时,另一个事务横插一脚将数据插入了,这个时候第一个事务再进行插入操作时就会发现数据已经存在了,无法插入,这和刚刚读取到结果不一致,就是幻读;

那有没有什么方法来解决这些并发事务问题呢?这里引入隔离机制!

2. 事务的隔离级别

通过事务的隔离机制就可以解决上述的并发事务问题,事务的隔离级别如下:

  • Read uncommitted:读未提交,这种隔离级别会导致当前事务读取到其它事务未提交的数据,也就是脏读;
  • Read committed:读已提交,这种隔离级别能使事务只会读取到其它事务提交后的数据,能够防止脏读,但无法解决不可重复读和幻读;
  • Repeatable Read:可重复读(MySQL 默认机制),能够使当前事务中的前后读取操作读取到的数据一致,以此解决不可重复读问题,但无法解决幻读;
  • Serializable:串行化,在当前事务未结束之前另一个事务对数据进行修改操作并提交事务时会进入阻塞,直到当前事务提交后才能解除阻塞状态,以此来解决幻读问题,同时也能解决脏读和不可重复读问题,但性能也是明显下降;

可见不同的隔离级别能够解决的并发事务问题不同:

隔离级别脏读不可重复读幻读
Read uncommitted
Read committed
Repeatable Read(默认)
Serializable

操作隔离级别的常用命令:

  1. 查看事务隔离级别

    SELECT @@TRANSACTION_ISOLATION;
    
  2. 设置事务的隔离级别

    SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {READ UNCOMMITED | Read COMMITED | REPEATABLE READ | SERIALIXABLE};
    
    -- 设置当前会话中隔离权限为 读未提交
    set session transaction isolation level read uncommited;
    
    -- 设置当前会话中隔离权限为 读已提交
    set session transaction isolation level read commited;
    
    -- 设置当前会话中隔离权限 可重复读
    set session transaction isolation level repeatable read;
    
    -- 设置当前会话中隔离权限 串行化
    set session transaction isolation level serializable;
    

:随着事务的隔离级别上升,数据的安全性得到提高,但性能也会随之下降,在确定事务隔离级别时需要我们根据需求场景合理调整!

以上便是对事务隔离级别的介绍了,如果上述内容对大家有帮助的话请给一个三连关注吧💕( •̀ ω •́ )✧✨


http://www.kler.cn/a/525759.html

相关文章:

  • 基于ollama,langchain,springboot从零搭建知识库三【解析文档并存储到向量数据库】
  • MySQL分表自动化创建的实现方案(存储过程、事件调度器)
  • ubuntu 更新24LTS中断导致“系统出错且无法恢复,请联系系统管理员”
  • Winform如何取消叉号,减号和放大(两种)
  • QModbusTCPClient 服务器断开引起的程序崩溃
  • Excel中LOOKUP函数的使用
  • 一文讲解Java中的BIO、NIO、AIO之间的区别
  • 力扣动态规划-15【算法学习day.109】
  • JavaScript 进阶(上)
  • openRv1126 AI算法部署实战之——TensorFlow TFLite Pytorch ONNX等模型转换实战
  • 开源 OA 办公系统
  • AI大模型开发原理篇-9:GPT模型的概念和基本结构
  • 亚博microros小车-原生ubuntu支持系列:17 gmapping
  • 指针(C语言)从0到1掌握指针,为后续学习c++打下基础
  • 小程序-基础加强-自定义组件
  • Java Stream API中的状态性操作与陷阱
  • JSR303校验教学
  • 某盾Blackbox参数参数逆向
  • 网络安全技术简介
  • Linux gdisk 命令使用详解
  • 跨平台物联网漏洞挖掘算法评估框架设计与实现文献综述之总结与展望
  • 未来可期|在真实与虚拟之间:AI+游戏如何再造娱乐体验
  • 74-《猴面小龙兰》
  • EtherCAT主站IGH-- 22 -- IGH之fsm_sii.h/c文件解析
  • unity学习23:场景scene相关,场景信息,场景跳转
  • HCIA-Access V2.5_10_1_PPP协议