数据库事务脏读、幻读、不可重复读的解决方法
概念
脏读:脏读又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2所读取到的数据是无效的。
幻读:
幻读是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,比如这种修改涉及到表中的“全部数据行”。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入“一行新数据”。那么,以后就会发生操作第一个事务的用户发现表中还存在没有修改的数据行,就好象发生了幻觉一样。不可重复读:
事务A首先读取了一条数据,然后执行逻辑的时候,事务B将这条数据改变了,然后事务A再次读取的时候,发现数据不匹配了,就是所谓的不可重复读了。丢失的修改:
两个事务同时修改同一行数据并提交,其中一个事务覆盖了另一事务的修改。
解决方法
以上出现的都是数据库事务隔离级别的问题,SQL标准定义了事务隔离级别分为四种(级别递减):
Serializable (串行化):最严格的级别,事务串行执行,资源消耗最大;简言之,它是在每个读的数据行上加上共享锁,但可能导致大量的超市现象和锁竞争。
REPEATABLE READ(可重复读) :保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。避免了“脏读取”和“不可重复读取”的情况,但不能避免“幻读”,但是带来了更多的性能损失。
READ COMMITTED (提交读):大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了“脏读取”,但不能避免“幻读”和“不可重复读取”。该级别适用于大多数系统。
Read Uncommitted(未提交读) :事务中的修改,即使没有提交,其他事务也可以看得到,会导致“脏读”、“幻读”和“不可重复读取”。
隔离级别 | 脏读 | 幻读 | 不可重复读 |
---|---|---|---|
Read Uncommitted(未提交读) | 可能 | 可能 | 可能 |
Read Commited (已提交读) | 不可能 | 可能 | 可能 |
Repeatable Read(可重复读) | 不可能 | 可能 | 不可能 |
Serializable (串行化) | 不可能 | 不可能 | 不可能 |
修改Mysql的事务隔离级别
# 修改配置文件
cd /etc/mysql/mysql.conf.d/
sudo vim mysqld.cnf# 添加以下代码
transaction-isolation=READ-COMMITTED
在Oracle,SqlServer中都是选择读已提交(Read Commited)作为默认的隔离级别,而Mysql却选择可重复读(Repeatable Read)作为默认隔离级别
数据库事务脏读、幻读、不可重复读的解决方法相关推荐
- 脏读 幻读 不可重复读 及其解决方法
一个事务读到另外一个事务还没有提交的数据,我们称之为脏读.解决方法:把事务隔离级别调整到READ COMMITTED 一个事务先后读取同一条记录,但两次读取的数据不同,我们称之为不可重复读.解决方法: ...
- mysql 中的脏读与幻读_一文带你理解脏读,幻读,不可重复读与mysql的锁,事务隔离机制...
首先说一下数据库事务的四大特性 1 ACID 事务的四大特性是ACID(不是"酸"....) (1) A:原子性(Atomicity) 原子性指的是事务要么完全执行,要么完全不执行 ...
- mysql 可重复读 悲观锁_一文带你理解脏读,幻读,不可重复读与mysql的锁,事务隔离机制...
首先说一下数据库事务的四大特性 1 ACID 事务的四大特性是ACID(不是"酸"....) (1) A:原子性(Atomicity) 原子性指的是事务要么完全执行,要么完全不执行 ...
- mysql悲观锁会有脏数据吗_一文带你理解脏读,幻读,不可重复读与mysql的锁,事务隔离机制...
首先说一下数据库事务的四大特性 1 ACID 事务的四大特性是ACID(不是"酸"....) (1) A:原子性(Atomicity) 原子性指的是事务要么完全执行,要么完全不执行 ...
- MySQL --- 19♪ 进阶15 TCL事务控制语言--建立结束事务/设置断点--默认隔离级别--脏读/幻读/不可重复读
#TCL事物控制语言 : /* Transaction control language : 事物控制语言 事务: 一个或者一组sql语句组成一个执行单元,这个执行单元要么全部执行,要 ...
- 数据库几个事务相关的知识点(脏读幻读不可重复读以及如何避免)
0. 设置MYSQL的隔离界别 # 查询数据库当前事务隔离级别 mysql> select @@global.transaction_isolation,@@transaction_isolat ...
- 事务的4种隔离级别,3大问题,脏读幻读不可重复读
一.数据库事务隔离级别 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted .Read committed .Repeatable read .Serializable ,这四 ...
- 脏读幻读不可重复读的区别
1.脏读:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据. 例如: 张三的工资为5000,事务A中把他的工 ...
- mysql数据库的事务 acid 隔离级别 脏读 脏写 幻读 不可重复读
事务的四大特征 原子性(atomicity):要么全部提交(commit),要么全部回滚(rollback) 一致性(consistency):数据从一个合法状态转换成另一种合法状态 隔离性(isol ...
最新文章
- 智能家居数据获得美好生活的6种方法
- opencv copyto函数
- CentOS下python-mysqldb安装
- MaxCompute与OSS非结构化数据读写互通(及图像处理实例)
- Hessian序列化复杂对象
- imagick用法!
- if单分支,二分支,多分支
- java-redis初探
- *第二周*数据结构实践项目二【多文件系统】
- 从进化的角度看为啥要均贫富
- android 组件内部实现触摸事件,更改背景
- 学术论文海报模板_推荐 | 绘制学术论文中的图表一般有哪些专业的软件?
- 大型架构学习——美团猫眼模块化实践
- elasticsearch 学习之 搭建简单的elasticsearch多节点服务器
- 基于stm32蓝牙智能小车设计
- python3爬取教务系统的个人学期课程表(无头谷歌浏览模拟登录)
- Android 自定义view 实现点击 展示下拉选项效果
- 是时候曝光这些低调却挣大钱的互联网公司了!
- 谁是好莱坞最牛的产品经理?
- 在GSYVideoPlayer中实现VLC 内核