mysql事务特点总结
1.mysql事务有4个隔离级别,以及会出现的问题如下图:

2. 脏读:
开启事务A,B。事务A在还没有提交的情况下,假如第一次查询id=1的用户的age=24。事务B执行了update 表 set age = 100 where id = 1; B事务并没有提交,紧接着再次查询id=1的用户的age时,age变成了其他值,这时事务A中出现了脏读。
解决办法: 在事务中,读取数据的时候加共享锁。 select ... lock in share mode;
3. 不可重复读:
什么是不可重复读?举例说明,两个事务A, B。两个事务查询结果都是id=1的用户age=24,id=2的用户age=25。这时A执行update 表 set age = 100 where id = 1; 这时A还没有提交,B也没有提交,B来查询id=1的用户age还是=24,然后A执行commit。此时B再次查询id=1的用户的age就=100,事务B并没有重复读取到之前id=1记录的状态。
不可重复读和脏读的区别就在于,修改了数据的事务有没有执行commit。没有提交,另一事务数据隔离性出现问题叫脏读;提交了,另一事务数据隔离性出现问题叫不可重复读。
解决办法:给每个事务增加客户端快照--可重复读隔离级别。
4. 幻读:
两个事务A,B。两个事务一开始 select * from '表' 查询出来的数据都是一样的,假如是5行记录,把这时数据状态称为"数据状态1"。这时,事务Ainsert一条记录,然后commit。这时B查询select * from '表',数据还是"数据状态1",5行数据,然后执行update '表' set column='xxx',看下面返回的Rows matched: 会是6,比5行多一行!然后再执行select * from '表',返回了6行数据!多出了一行,好像之前5行的数据是幻觉一样。这种情况,就叫幻读。
解决办法: mvcc,多版本控制,也叫乐观锁。
5.查看会话的隔离级别:
select @@global.tx_isolation;
6. 修改会话的隔离级别:
set tx_isolation='read-committed';
7. 可串行化隔离级别最高,通过对更改操作(cud)加排他锁,查询操作加共享锁,没有客户端快照 来实现的。除了两个事务都是执行的select操作,不阻塞另一事务外。其他交替出现的操作都会阻塞另一事务,知道该事务commit。
8. 如果一个事务A(任何隔离级别下)对某行记录执行了更改操作,这时一个普通操作(非事务)也对该行记录执行更改操作的化,会被阻塞,直到事务A commit.
mysql事务特点总结的更多相关文章
- Mysql事务探索及其在Django中的实践(二)
继上一篇<Mysql事务探索及其在Django中的实践(一)>交代完问题的背景和Mysql事务基础后,这一篇主要想介绍一下事务在Django中的使用以及实际应用给我们带来的效率提升. 首先 ...
- MySQL 事务
MySQL 事务主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这样,这些数据库操作语句就构成 ...
- mysql事务和并发控制
谈到事务,首先想到的问题是并发控制.比如两个用户同时操作数据库里面的一张表,一个正在读数据,一个正在删除数据,那么读数据的读出的结果究竟是多少?并发可以提高系统的性能,让多个用户同时操作一份数据,但为 ...
- MySQL事务学习-->隔离级别
MySQL事务学习-->隔离级别 6 事务的隔离级别 设置的目的 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别. 数据库是要被广大客户所共享访问的,那么在数据库操作过程中 ...
- mysql 事务是专门用来管理insert,update,delete语句的,和select语句一点不相干
1.mysql 事务是专门用来管理insert,update,delete语句的,和select语句一点不相干 2.一般来说,事务是必须满足4个条件(ACID): Atomicity(原子性).Con ...
- php mysql事务
这里记录一下php操作mysql事务的一些知识 要知道,MySQL默认的行为是在每条SQL语句执行后执行一个COMMIT语句,从而有效的将每条语句独立为一个事务.但是,在使用事务时,是需要执行多条sq ...
- mysql事务问题
mysql事务: 若mysql 开启事务后START TRANSACTION ,不显示提交commit,则默认自动回滚,而不是默认自动提交.
- MYSQL事务和锁
mysql事务(一)—转载 2012年12月20日 ⁄ Mysql数据库, 技术交流 ⁄ 暂无评论 一. 什么是事务 事务就是一段sql 语句的批处理,但是这个批处理是一个atom(原子) ,不可分割 ...
- MySQL事务内幕与ACID
MySQL的事务实现严格遵循ACID特性,即原子性(atomicity),一致性(consistency),隔离性(isolation),持久性(durability).为了避免一上来就陷入对ACID ...
- 数据库 Mysql事务详解
Mysql事务 mysql的事务默认是自动提交的,也就是你提交一个query,他就直接执行!我们可以通过 禁止自动提交 开启自动提交 //mysql事务 #include <stdio.h> ...
随机推荐
- Python函数分类及操作
为什么使用函数? 答:函数的返回值可以确切知道整个函数执行的结果 函数的定义:1.数学意义的函数:两个变量:自变量x和因变量y,二者的关系 2.Pytho ...
- SQLyog 连接主机的时候出现错误
这个 连接主机的时候出现: 这个时候打开cmd 找到mysql 的bin目录 输入 mysqld -nt -remove 即可 直接登录,注意这里的d代表的是服务端 接下来就可以不用输入密码直 ...
- 使用XStream解析复杂XML并插入数据库(二)
标注黄色地方:我需要加深学习!!! 我写的是webservice,目前具体写webservice的步骤我还不清楚, 整理完小知识开始整理webservice! 针对以下格式的XML进行解析 <? ...
- 浅谈BFC的理解
在 web 页面布局中,有三种控制元素版式布局的模型: 普通流 (Flow) 元素在 HTML 中按照先后位置从上至下的流式排列方式布局. 浮动流(Float) 在浮动布局中,元素首先按照普通流的位置 ...
- 论文选读一: Towards end-to-end reinforcement learning of dialogue agents for information access
Towards end-to-end reinforcement learning of dialogue agents for information access KB-InfoBot 与知识库交 ...
- angular学习笔记(3)
一.angular的核心 1.组件 2.指令 3.服务 4.依赖注入
- 笔记《JavaScript 权威指南》(第6版) 分条知识点概要2—类型、值、变量
[类型.值.变量]数字.文本.布尔值.null和undefined.全局对象.包装对象.不可变的原始值和可变的对象引用.类型转换.变量声明.变量作用域 P44~71(PDF版).P32~59(书版) ...
- 电磁波、无线电、802、WLAN及WiFi的区别与联系
一.电磁波.无线电.WLAN和WiFi的关系 电磁波 > 无线电 [+ 可见光] > WLAN [+ 电话 ]> WiFi [+蓝牙] 参考:https://zh.wikipedia ...
- Java获取本地IP地址和主机名
方式一:通过java.net.InetAddress类获取 public void test1() { try { InetAddress addr = InetAddress.getLocalHos ...
- JSP之mysql中文乱码问题
查看数据库编码方式 show variables like 'character%'; 关于jsp页面插入数据库乱码问题. 我遇到的问题是插入数据库后后台select * from tablename ...