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> ...
随机推荐
- [Windows]卸载Office 2016密钥
cscript "C:\Program Files (x86)\Microsoft Office\Office16\ospp.vbs" /dstatus BTDRB
- [ Servlet / JSP ] J2EE Web Application 中的 JSESSIONID 是什么?
JSESSIONID is a cookie in J2EE web application which is used in session tracking. Since HTTP is a st ...
- L - Non-Prime Factors (质数筛选+因子分解)
In many programming competitions, we are asked to find (or count the number of) Prime Factors of an ...
- 延迟提交form
提交按钮延迟提交form表单 function a(){document.getElementById('form1').submit();}setTimeout(a,5000);
- Linux删除/boot后该如何恢复
一.其实不光boot目录被删除,也有系统启动不起来等,一直因为/boot这个目录的的问题,今天就来解决一下 Centos 6 1.进入救援,先修复vmlinz(内核) chroot /mnt/sysi ...
- 《SSO CAS单点系列》之 APP原生应用如何访问CAS认证中心
4.开发支持APP登录的移动服务端接口.接收APP登录请求,采用HttpClient转发至CAS认证中心登录,返回json数据解析并最终返回给客户端.本地会话采用redis维护,登录成功,返回acce ...
- LVM方式安装Ubuntu 系统
重装Ubuntu系统,使用LVM管理磁盘,最好不要使用默认的LVM安装方式,而应挂载U盘启动盘,进行物理磁盘分区,创建物理卷.卷组.虚卷(即创建LVM系列操作),在安装系统时将虚卷挂载到文件目录上.将 ...
- PDOMySQL实现类, 自动重置无效连接
PHP连接MySQL时, 有可能因为MySQL的原因,而使得php里生成的连接无效.比如超过8小时, MySQL自动断开空闲连接的问题,虽然可以调高这个时间,但显然这不是比较文艺的实现方式.现在洒家用 ...
- 【Angular 5】数据绑定、事件绑定和双向绑定
本文为Angular5的学习笔记,IDE使用Visual Studio Code,内容是关于数据绑定,包括Property Binding.Class Binding.Style Binding. 在 ...
- 调试 kafka manager 源码
前提:可以上外网. kafka manager 是一款优秀的监控 kafka 的工具,采用 scala 语言编写,如何调试 kafka manager 呢? kafka manager 使用 play ...