mysql innodb 读加锁_InnoDB 读大量数据时会加读锁么?
结论
默认不会加读锁!但 MySQL InnoDB 的可重复读并不保证避免幻读,需要应用使用加锁读来保证。而这个加锁度使用到的机制就是 next-key locks。
隔离级别说明
MySQL InnoDB事务的隔离级别有四级,默认是“可重复读”(REPEATABLE READ)。
未提交读(READ UNCOMMITTED)。另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据(脏读)。
提交读(READ COMMITTED)。本事务读取到的是最新的数据(其他事务提交后的)。问题是,在同一个事务里,前后两次相同的SELECT会读到不同的结果(不重复读)。
可重复读(REPEATABLE READ)。在同一个事务里,SELECT的结果是事务开始时时间点的状态,因此,同样的SELECT操作读到的结果会是一致的。但是,会有幻读现象(稍后解释)。
串行化(SERIALIZABLE)。读操作会隐式获取共享锁,可以保证不同事务间的互斥。
四个级别逐渐增强,每个级别解决一个问题。
脏读,最容易理解。另一个事务修改了数据,但尚未提交,而本事务中的SELECT会读到这些未被提交的数据。
不重复读。解决了脏读后,会遇到,同一个事务执行过程中,另外一个事务提交了新数据,因此本事务先后两次读到的数据结果会不一致。
幻读。解决了不重复读,保证了同一个事务里,查询的结果都是事务开始并且第一次查询时的状态(一致性)。但是,如果另一个事务同时提交了新数据,虽然本事务再次按照相同的条件查找会得到相同的结果集,但是本事务指定更新时,就会“惊奇的”发现了这些新数据,貌似之前读到的数据是“鬼影”一样的幻觉。
所以 InnoDB 默认还是会出现幻读现象的,所以还是可能会加锁。
幻读的演示
银行A开启了一个事务窗口,查询当前系统中有没有"wangwu"用户,发现没有,银行B也开启了一个事务窗口,查询当前系统中也没有"wangwu"用户,银行A先创建"wangwu"用户并且提交,由于可重复读取,银行B在一次事务中必须保证查询的数据一致性,因此查询不到"wangwu",结果银行B窗口认为wangwu没有被注册想注册"wangwu"用户,就创建"wangwu"用户结果发现系统提示"wangwu"用户已经被注册",但是在本次事务中又查询不到"wangwu",就好像出现幻觉一样
create table user(
id int primary key,
username varchar(30),
money double
);
insert into user values(1,'zhangsan',100);
insert into user values(2,'lisi',100);
打开两个MySQL窗口
锁
解决幻读可以提高事务隔离级别为 Serializable (串行化),它是使用的共享锁,当然 MySQL 有锁的类型:共享锁(S)、排他锁(X)、意向共享(IS)、意向排他(IX)。 还有非锁定读:不需要等待访问行上的锁释放,读取行的一个快照。
mysql innodb 读加锁_InnoDB 读大量数据时会加读锁么?相关推荐
- mysql 保证事物完整性_数据库高并发请求,如何保证数据完整性?详解MySQL/InnoDB的加锁...
本文是对MySQL/InnoDB中,乐观锁.悲观锁.共享锁.排它锁.行锁.表锁.死锁概念的理解,这些在面试中也经常遇到,如数据库高并发请求,如何保证数据完整性?今天我查阅资料进行了MySQL/Inno ...
- 【169期】面试官:同学,分析一下MySQL/InnoDB的加锁过程吧
程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 17 分钟. 来自:cnblogs.com/crazylqy/p/7611069.html Hello,大家好,我是良月柒. ...
- Mysql(Innodb)如何避免幻读
大龄菜逼初级DBA瞎JB写的,大家凑合看当个乐? 幻读Phantom Rows The so-called phantom problem occurs within a transaction wh ...
- MySQL InnoDB如何解决幻读?
1 数据准备 CREATE TABLE `t` (`id` int(11) NOT NULL,`c` int(11) DEFAULT NULL,`d` int(11) DEFAULT NULL,PRI ...
- mysql innodb 从 ibd 文件恢复表数据
最近内部的 mysql 数据库发生了一件奇怪的事,其中有一个表 users625 突然出现问题, 所有对它的操作都报错误 数据表不存在. mysql> select count(*) from ...
- MySQL InnoDB 锁介绍及不同 SQL 语句分别加什么样的锁
作者:iceman1952(本文来自作者投稿) 本文中,我们详细介绍MySQL InnoDB存储引擎各种不同类型的锁,以及不同SQL语句分别会加什么样的锁. 阅读提示 1. 本文所参考的MySQL文档 ...
- mysql innodb myisam 区别_InnoDB与MyISAM的六大区别_MySQL
bitsCN.com 本文主要整理了Mysql 两大常用的存储引擎MyISAM,InnoDB的六大常见区别,来源于Mysql手册以及互联网的资料 InnoDB与Myisam的六大区别 MyISAMIn ...
- mysql innodb 修复表_Innodb 表修复
摘要: 突然收到MySQL报警,从库的数据库挂了,一直在不停的重启,打开错误日志,发现有张表坏了.innodb表损坏不能通过repair table 等修复myisam的命令操作.现在记录下解决过程, ...
- MySQL/InnoDB中,乐观锁、悲观锁、共享锁、排它锁、行锁、表锁、死锁概念的理解
MySQL/InnoDB的加锁,一直是一个面试中常问的话题.例如,数据库如果有高并发请求,如何保证数据完整性?产生死锁问题如何排查并解决?我在工作过程中,也会经常用到,乐观锁,排它锁,等.于是今天就对 ...
最新文章
- java实现在pdf文档上填充内容
- rust图形编程_国产编程语言“木兰”,你以为是个王者,结果是个玩笑
- CTFshow 反序列化 web277
- mongodb的id的唯一性_探讨MongoDB的_id字段含义,及对MongoDB数据库的重要性
- properties 配置回车_在Ubuntu上部署基于Docker的RSSHub,并配置SSL证书
- 什么技能产品经理不会提,但技术人必须懂?
- POJ - 3278 Catch That Cow 简单搜索
- 盲审不到4分的论文竟中了ICLR 2019??!!ICLR 2019官方这样回应
- Atom飞行手册翻译: 3.5 创建主题
- 04-linux下安装neo4j
- Python函数的参数
- R语言读取淘宝的单品页的名称和价格
- horizon服务主要模块_得助智能:智能外呼机器人有哪些模块功能层级?
- python的matplotlib画图时独立窗口_解决新版Pycharm中Matplotlib图像不在弹出独立的显示窗口问题...
- Android实战开发通用流行框架大全
- 调整图片大小的方法(变大或变小)
- JavaScript中获取键盘事件
- 乐理小课堂——自然/和声/旋律大调的调式音阶
- ui设计学习路线图分享送给初学者
- 爆肝1万字《c++入门综合》
热门文章
- fortran:使用IMSL函数库计算第一/二类完全椭圆积分
- ubuntu20有线网络无线网络
- 如何用OKR提高下属执行力
- Oracle报错ora03135,(转)连接到oracle10g,报ORA-03135异常
- python练习.一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
- H3CTE讲师分享H3C实验7 PPP
- iOS 相机实时滤镜效果
- 超级列表框导入到mysql_易语言excel表格怎样导入到超级列表框
- 内置式永磁电机maxwell2d_基于ANSYSMaxwell2D分析异步起动永磁同步电机
- APS软件必须满足不同规划要求