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> ...
随机推荐
- 从身份证管理系统思考企业CMDB的建设
关注嘉为科技,获取运维新知 对大部分中大型的企业来说,CMDB建设对于整个IT服务和IT运维管理的重要性不言而喻,但是目前仍然有非常多的企业无法建设好CMDB. 我最近刚好接触了一个公安系统的朋友,他 ...
- 『计算机视觉』物体检测之RefineDet系列
Two Stage 的精度优势 二阶段的分类:二步法的第一步在分类时,正负样本是极不平衡的,导致分类器训练比较困难,这也是一步法效果不如二步法的原因之一,也是focal loss的motivation ...
- mongodb+express+nodejs(登陆退出)
1.安装expressnpm i -g express(新版本4.X以上要安装express-generator)npm i -g express-generator 2.安装mongodb下载地址h ...
- switch与if语句的应用
C语言自学之switch与if语句的应用 #include<stdio.h> #include<stdlib.h> int main() { ;//需要计算的年份 ;//需要计 ...
- 百度EasyDL文本分类自定义API示例代码 python
因为需要将命名实体中的组织机构名进一步区分为政府.企业.社会组织等,在easydl上做了一个文本分类模型,但是要用这个接口时候发现, 官方文档中竟然还在用urllib2的库,且不完整.好多地方会报错, ...
- Laravel 利用中间件控制权限。
1.把所有需要控制的url写到config/admin.php里. 2.http/kernel.php文件里加上中间件. 3.http/Middleware/Permission.php 4.视图层
- web前端超出两行用省略号表示
HTML <span class="GW_bod0112211"> 吐鲁番特级无炳黑加仑葡萄干500g包邮无籽吐鲁番特级无炳黑加仑葡萄干500g包邮无籽吐鲁番特级无炳黑 ...
- python模块part1
一.时间模块 1.时间表示形式 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的时间字符串:(1)时间戳(timestamp) :通常来说,时间戳表示的是 ...
- ntopng网络流量实时监控
ntopng is the next generation version of the original ntop, a network traffic probe that monitors ne ...
- css--父元素塌陷
当父元素内都是漂浮元素时,会造成父高度塌陷的问题.(因为等同于父元素内容为空,所以长,宽都等于空) 我们想要的页面结构是: <!DOCTYPE html> <html lang=&q ...