[MySQL] mysql的事务隔离和幻读和死锁问题
1.系统要通过严格的ACID测试,ACID表示原子性/一致性/隔离性/持久性
原子性:一个事务必须被视为一个不可分割的最小工作单元
一致性:数据库总是从一个一致性的状态转换到另外一个一致性的状态
隔离性:通常来说一个事务所做的修改在最终提交以前对其他事务是不可见的
持久性:一旦事务提交,则其所做的修改就会永久保存到数据库中
2.sql标准中定义了四种隔离,较低级别的隔离可以执行更高的并发,开销也更低
READ UNCOMMITTED 未提交读,事务中的修改还没提交,其他事务就可以看到,这也是脏读,一般不会用
READ COMMITED 提交读,大多数的默认级别,在提交之前,所做的任何修改对其他事务都是不可见的
REPEATABLE READ 可重复读,解决了脏读的问题,保证了同一个事务中多次读取同一个记录结果一致,但是还是会有幻读问题
SERIALIZABLE 可串行化,避免幻读问题,每一行都加锁
3.事务的隔离级别下的问题
脏读:事务可以读取别的事务未提交的脏数据
不可重复读:事务不可以读取未提交的数据,但是如果在另一个事务修改并提交了数据,此时可以读取到,同一事务两次相同的select结果可能会不同
幻读:事务不可以读取未提交的,也不能读取修改提交的,但是当另一个事务插入新数据提交后,我本次事务有时会插入冲突,或者更新时更新的数据多了
加锁:强制串行执行,锁开销比较大
4.查看隔离级别:
select @@global.tx_isolation, @@tx_isolation;
| @@global.tx_isolation | @@tx_isolation |
+-----------------------+-----------------+
| REPEATABLE-READ | REPEATABLE-READ
5.幻读问题
开启事务,查询数据
此时有另外的会话插入新数据
再次查询新数据不会出现,但是插入时会报错
6.mysql 死锁:
1.两个或多个事务在同一个资源上相互占用,并请求锁定对方占用的资源,导致恶性循环
2.解决这种问题,检测到死锁的循环依赖,立即返回一个错误
3.时间达到了锁等待超时限定,放弃锁请求
4.将持有最少行级写锁的事务回滚
5.如果是真正的数据冲突,这种是很难避免的,必须要提交或回滚其中一个事务
开启事务,更新数据,还没提交
此时另外的会话执行同样的更新,会阻塞,一段时间和会报错
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
[MySQL] mysql的事务隔离和幻读和死锁问题的更多相关文章
- mysql中不同事务隔离级别下数据的显示效果--转载
事务是一组原子性的SQL查询语句,也可以被看做一个工作单元.如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查询语句因为崩溃或其他原因而无法执行,那么所有的语句就都 ...
- 浅谈mysql中不同事务隔离级别下数据的显示效果
事务的概念 事 务是一组原子性的SQL查询语句,也可以被看做一个工作单元.如果数据库引擎能够成功地对数据库应用所有的查询语句,它就会执行所有查询,如果任何一条查 询语句因为崩溃或其他原因而无法执行,那 ...
- 事务,Oracle,MySQL及Spring事务隔离级别
一.什么是事务: 事务逻辑上的一组操作,组成这组操作的各个逻辑单元,要么一起成功,要么一起失败. 二.事务特性(4种): 原子性 (atomicity):强调事务的不可分割:一致性 (consiste ...
- MySQL事物(一)事务隔离级别和事物并发冲突
数据库的操作通常为写和读,就是所说的CRUD:增加(Create).读取(Read).更新(Update)和删除(Delete).事务就是一件完整要做的事情.事务是恢复和并发控制的基本单位.事务必须始 ...
- MySQL四种事务隔离级别详解
本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做 ...
- 深入理解Mysql索与事务隔离级别
1. 概述 1.1 定义 锁是计算机协调多个进程或线程并发访问某一资源的机制. 在数据库中,除了传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供需要用户共享的资源.如何保证数据并 ...
- 面试必问的MySQL锁与事务隔离级别
之前多篇文章从mysql的底层结构分析.sql语句的分析器以及sql从优化底层分析, 还有工作中常用的sql优化小知识点.面试各大互联网公司必问的mysql锁和事务隔离级别,这篇文章给你打神助攻,一飞 ...
- MySql锁和事务隔离级别
在讲mysql事物隔离级别之前,我们先简单说说mysql的锁和事务. 一:数据库锁 因为数据库要解决并发控制问题.在同一时刻,可能会有多个客户端对同一张表进行操作,比如有的在读取该行数据,其他的尝试去 ...
- mysql四种事务隔离级别
mysql事务并发问题 ACID什么的就不啰嗦了.mysql多个事务并发的时候,可能会出现如下问题: 1. 更新丢失 即两个事务同时更新某一条数据,后执行的更新操作会覆盖先执行的更新操作,导致先执行的 ...
随机推荐
- layui 表格在排序之后没有重新渲染问题
问题描述: 在layui表格中,最后一列增加了操作按钮,并且在某些行设置了样式,但是在排序之后,按钮的点击事件失效了,样式也没有了,可能是没有执行done回调 原因: done回调只有在render和 ...
- Swift与C++混编 OpenCV初体验 图片打码~
OpenCV初体验,给图片打码 提到OpenCV,相信大多数人都听说过,应用领域非常广泛,使用C++开发,天生具有跨平台的优势,我们学习一次,就可以在各个平台使用,这个还是很具有诱惑力的.本文主要记录 ...
- QEMU KVM Libvirt手册(10): KVM的各种限制
Overcommits KVM allows for both memory and disk space overcommit. However, hard errors resulting fro ...
- 轻量级C#网络通信组件StriveEngine —— C/S通信开源demo(附源码)
前段时间,有几个研究ESFramework网络通讯框架的朋友对我说,ESFramework有点庞大,对于他们目前的项目来说有点“杀鸡用牛刀”的意思,因为他们的项目不需要文件传送.不需要P2P.不存在好 ...
- spring的定时器
一:基于xml配置的方式 1:编写普通的pojo 类 package com.aflyun.web.task; import org.springframework.stereotype.Compon ...
- [Swift]LeetCode134. 加油站 | Gas Station
There are N gas stations along a circular route, where the amount of gas at station i is gas[i]. You ...
- [Swift]LeetCode339. 嵌套链表权重和 $ Nested List Weight Sum
Given a nested list of integers, return the sum of all integers in the list weighted by their depth. ...
- [Swift]LeetCode824. 山羊拉丁文 | Goat Latin
A sentence S is given, composed of words separated by spaces. Each word consists of lowercase and up ...
- [Swift]LeetCode909. 蛇梯棋 | Snakes and Ladders
On an N x N board, the numbers from 1 to N*N are written boustrophedonically starting from the botto ...
- presto中ldaps配置完整流程
最近开始转战presto,至于前面章节中的Hbase,我也会持续更新,喜欢我的可以关注我.关于这个流程,我看过阿里云的的一篇文章,但看后还是不知所云,就写下了这篇博客,大家感兴趣的可以访问那篇文章—— ...