mysql事务隔离级别之锁实现原理,脏读、不可重复读、幻读出现原因及解决方案
mysql事务隔离级别原理
观看了很多网上的博客,挺令人伤心,很难找到想要的答案。。。
一:所需知识
1,mysql中的锁
1.1,读锁(共享锁)
规则:若事务1对数据对象A加上读锁,则事务1只能读A;其他事务只能再对A加读锁,而不能加写锁,直到事务1释放A上的读锁。
作用:这就保证了其他事务可以读A,但在事务1释放A上的读锁之前不能对A做任何修改。
1.2,写锁(排他锁)
规则:若事务1对数据对象A加上写锁,则只允许事务1读取和修改A,其它任何事务都不能再对A加任何类型的锁,直到事务1释放A上的锁。
作用:防止任何其它事务读取或修改。
2,事务
MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成一个事务!
2.1 前提
在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
2.2 作用
事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行。
二:mysql四种隔离级别
隔离级别越高,对应的并发性能越差,数据越安全可靠。
隔离级别由低到高:
1,READ UNCOMMITTED读未提交
未加锁。
READ UNCOMMITTED读未提交问题:可能出现脏读、不可重复读、幻读问题。
脏读概念:
事务读取到其他事务没提交的数据。
例1-----脏读:
表格1:
事务1 | 事务2 |
---|---|
Update a set name=‘Shakespeare’ where id=1; //更新数据,但还未提交事务 | |
select * from a where id=1; //读到了未提交的脏数据 | |
Update a set name=‘单边李’ where id=1; commit; //最终修改并且提交事务 |
脏读解决方案:使用READ COMMITTED级别(行级写锁)。
2,READ COMMITTED读已提交
解决脏读的原理:
表格1中的事务2–
这行数据在写操作的时候,加上行级写锁。即在更新的时候,不允许其他事务读。
READ COMMITTED读已提交问题:可能出现不可重复读、幻读问题。
不可重复读:概念
在同一次事务中前后查询不一致。
例2--------不可重复读:表格2中的事务1并没有对数据进行更新操作,预期的数据是不变的,但前后数据不一致。
表格2:
原数据:name为唐寅
事务1 | 事务2 |
---|---|
select * from a where id=1; //第一次查询,name=唐寅 | |
Update a set name=‘单边李’ where id=1; commit; //最终修改并且提交事务 | |
select * from a where id=1; commit;//第二次查询,name=单边李,数据不一致. |
不可重复读解决方案:REPEATABLE READ级别(行级读锁、写锁)。
3,REPEATABLE READ可重复读
解决不可重复读的原理:
在表格2中 –
这条数据加上行级读锁、写锁,整个事务1(第一次查询开始到第二次查询结束)结束之后再释放读锁。即两次读的整个过程,不允许其他事务写。
写锁作用:即更新的时候不允许读(解决脏读)
REPEATABLE READ问题:可能出现幻读问题。
幻读概念:
一次事务中前后数据量发生变化,用户产生不可预料的问题。
例3---------幻读:
表格3:
事务1 | 事务2 |
---|---|
select * from a where id>1; //第一次查询,10条数据 | |
Insert into a value(99,…); commit; //插入一条新数据,事务2提交 | |
select * from a where id>1; commit; //第二次查询,事务1提交,会发现多一条数据 |
幻读解决方案:SERIALISABLE级别(表级读、写锁)
4,SERIALISABLE序列化
解决幻读原理:
数据库表加表级的读锁、写锁。即读整张表的时候,不允许其他事务对这张表进行写操作;
写锁作用:表中有写操作的时候,不允许其他事务读。(避免脏读)
mysql事务隔离级别之锁实现原理,脏读、不可重复读、幻读出现原因及解决方案相关推荐
- mysql 脏读 不可重复读 幻读_mysql事务隔离级别/脏读/不可重复读/幻读详解
一.四种事务隔离级别 1.1read uncommitted 读未提交 即:事务A可以读取到事务B已修改但未提交的数据. 除非是文章阅读量,每次+1这种无关痛痒的场景,一般业务系统没有人会使用该事务隔 ...
- mysql事务隔离级别与锁_mysql事务隔离级别与锁
2.隔离级别实现 上一节介绍了ANSI定义的3种异象,及根据禁止异象的个数而定义的事务隔离级别.因为不存在严格.严谨的"官方"定义,各主流 2.1 Lock-based 隔离级别实 ...
- mysql不可重复读和重复读_MySql隔离级别:RU / RC / RR / S + 脏读 / 不可重复读 / 幻读 / 可重复读...
MySQL 事务 本文所说的 MySQL 事务都是指在 InnoDB 引擎下,MyISAM 引擎是不支持事务的. 数据库事务指的是一组数据操作,事务内的操作要么就是全部成功,要么就是全部失败,什么都不 ...
- mysql 事务隔离级别实现原理_MySQL事务隔离级别和实现原理 - 米扑博客
开发中经常提到数据库的事务,那你知道数据库还有事务隔离的说法吗, 事务隔离还有隔离级别,那什么是事务隔离,隔离级别又是什么呢? MySQL 事务 本文所说的 MySQL 事务都是指在 InnoDB 引 ...
- 上个厕所的功夫,搞懂MySQL事务隔离级别,Java学习视频百度云盘
| 14 | 朱志鹏 | 男 | 25 | 技术1部 | 5000 | 看小说 | | 19 | 李昂 | 男 | 27 | 技术1部 | 7000 | 看片儿 | ±-±----------±--- ...
- 上个厕所的功夫,搞懂MySQL事务隔离级别
"隔离级别" 出于MySQL四大特性(ACID)中的"I",也就是隔离性.目的是实现数据.事务一致性"C". MySQL在多线程并发场景下, ...
- 从实际蹲坑中涨姿势之——彻底搞懂Mysql事务隔离级别
一.业务背景 最近在做一个类似于任务分发的平台,分为任务管理平台和作业机,任务管理平台负责接收作业机的请求,并为作业机分配任务,所有的任务都存在表t_task_info,其使用一个字段task_sta ...
- mysql事务隔离级别 花_MySQL事务的隔离级别
为什么要有事务? 当需要对一个数据表进行一系列多个操作的情况下,为了防止这些操作中一部分操作成功,而另一部分操作失败,从而导致数据不正确,我们就需要事务来控制了. 当两个人或者多个人同时操作同一条数据 ...
- MySQL事务隔离级别和Spring事务关系介绍
事务隔离级别介绍 隔离级别 脏读 不可重复读 幻读 未提交读(Read uncommitted) 可能 可能 可能 已提交读(Read committed) 不可能 可能 可能 可重复读(Repeat ...
最新文章
- 2018/8/24阅读文献 A Unified Model for Multi-Objective Evolutionary Algorithms with Elitism
- java 的lambda表达式
- Linux内核tcp时间测量,linux内核 – 测试linux内核中函数的执行时间
- 32位hex转浮点 python_python——int()、hex()、oct()、bin()、float()数值类型转换函数
- 系统架构设计师考试4
- 文件存储,块存储,对象存储的区别
- docker 制作本地镜像_Docker系列-(2) 镜像制作与发布
- 如何制作一个商城小程序?
- 黑灰产眼中的NFT:平台嗷嗷待宰,用户送钱上门
- 交换机和路由器的基本命令
- MailConnectException: Couldn‘t connect to host
- OBS studio
- 优化-处理大量定时任务的思路
- Fone Keeper Mac版,帮你轻松恢复iOS数据
- R语言使用na.omit函数删除向量数据中的缺失值(NA值)
- SSM框架实现后台管理系统权限管理(用户、菜单、角色)
- 2022年全球市场机器视觉频闪仪总体规模、主要生产商、主要地区、产品和应用细分研究报告
- USB HUB(FE1.1S)电路
- 怎么让自己的网站在百度搜索中带图片显示
- 鸿蒙手机摄影,鸿蒙系统正式亮相 华为:手机随时可以使用