当前位置:网站首页>mysql四种隔离级别
mysql四种隔离级别
2022-08-02 17:19:00 【drhrht】
前言:
mysql 事务有四种隔离级别,分别是:读未提交READ UNCOMMITTED 、读提交 READ COMMITTED、可重复读REPEATABLE READ、串行化SERIALIZABLE。下面我们分别看下不同隔离级别下对事务的影响。
首先查看mysql的隔离级别: show variables like 'transaction_isolation';
我们看到mysql的默认隔离级别是可重复读,下面设置mysql的隔离级别为读未提交。这里我们只设置当前会话的隔离级别:set session transaction isolation level READ UNCOMMITTED;
然后我们在数据库中建立这样一张表 staffs:
CREATE TABLE `staffs` (
`id` int DEFAULT NULL,
`name` char(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL,
`age` int DEFAULT NULL,
KEY `id_name_age_index` (`id`,`name`,`age`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
然后预置一部分数据:
读未提交
接下来我们进行一个操作,来演示读未提交的隔离级别。
BEGIN;
select * from staffs where id =1;
得到如下结果:
事务B执行:
BEGIN;
select * from staffs where id =1;
update staffs set age=11 where id=1;
事务B 执行完update操作后,在事务A中,再查询下id=1的值,如下所示:
可以看到,此时事务A已经读到了事务B的修改,注意此时事务B尚未提交commit。 这个也就是我们所说的脏读。
读已提交
接下来演示下读提交,修改当前会话的隔离级别为READ COMMITTED读提交set session transaction isolation level READ COMMITTED;
然后按照上面的顺序执行:
发现,在读提交的隔离级别下,当事务B修改完数据尚未提交时,事务A是无法读取到修改的数据的。当事务B提交事务后,事务A才可以看到修改的结果。
可重复读
修改当前会话的隔离级别为可重复读: set session transaction isolation level REPEATABLE READ;
还按照上面的事务执行顺序执行:
可以发现,当事务B提交后,事务A查询的结果依然是事务A开启时读到的数据,这就是所谓的可重复读,也就是说事务开启时读到的数据,在事务提交前,是一致的,不会因为外面事务的修改提交而改变开启事务前读到的值。
串行化
设置数据库的隔离级别为SERIALIZABLE,然后按照图下的步骤执行操作
当事务A 查询id为1的数据行后,事务B尝试去update id=1的数据行,就会被阻塞住。只有当事务Acommit 后,事务B才执行成功(可以看到步骤2执行了22秒)。当事务A再进行查询ID=1的数据时,发现age还是13,而事务B查询已经变成了14.这是因为事务B还没有提交,对于串行化,对于同一行数据,必须一个事务一个事务顺序执行,当事务B提交后,事务A再查询,就变成了14.
更多java高级学习课程资料,java课件,源码,安装包等小编已经整理打包好!有兴趣想要学习的小伙伴点赞私信回复学习即可免费领取!
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
- How Tencent architects explained: The principle of Redis high-performance communication (essential version)
- 土巴兔IPO五次折戟,互联网家装未解“中介”之痛
- 新特性解读 | MySQL 8.0 GIPK 不可见主键
- 暴跌99.7%后,谁还在买卖「二舅币」?
- 小程序毕设作品之微信体育馆预约小程序毕业设计成品(8)毕业设计论文模板
- Redis的介绍和使用
- 深圳地铁16号线二期进入盾构施工阶段,首台盾构机顺利始发
- H5网页播放器EasyPlayer.js播放器界面的加载效果无法消失是什么原因?
- golang源码分析(4):select
- 再获权威认证!马上消费安逸花APP通过中国信通院“金融APP人脸识别安全能力评测”
猜你喜欢
随机推荐
golang源码分析(3):thrift
默认参数的代码实现及日期的注入与显示
Several common cross-domain solutions
安全至上:落地DevSecOps最佳实践你不得不知道的工具
Wechat Gymnasium Appointment Mini Program Graduation Design Finished Works (7) Mid-term Inspection Report
NIO Cup 2022 Niu Ke Summer Multi-School Training Camp 5 ABCDFGHK
年轻人接棒大妈,金价跌回“4字头”,七夕迎黄金消费小热潮
erp系统和wms系统有什么区别
分布式 | dble 启动的时候做了什么之配置检测
Google Earth Engine APP—— 一个不用写代码可以直接下载相应区域的1984-2021年的GIF遥感影像动态图
再获权威认证!马上消费安逸花APP通过中国信通院“金融APP人脸识别安全能力评测”
德国客户对文档管理系统、工作流自动化软件 DocuWare 的评价
ECCV 2022 | 清华&腾讯AI Lab提出REALY:重新思考3D人脸重建的评估方法
mui中使用多级选择器实现省市区联动
SQL Statement Basics
What is the difference between erp system and wms system
搭建属于自己的知识库(Wikijs)
动力电池扩产潮,宁德时代遭围剿
executeScript异步执行的时候没有返回值的原因
Nacos环境隔离