创建数据表test,表定义如下所示:

CREATE TABLE `test` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(20) NOT NULL,

PRIMARY KEY (`id`),

KEY `idx_name` (`name`)

) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

创建测试数据集,插入SQL语句如下所示:

insert into test value(null,'aaa'), (null,'aaa'), (null,'aaa'), (null,'aaa'), (null,'aaa'), (null,'aaa');

insert into test value(null,'bbb'), (null,'ccc'), (null,'ddd'), (null,'eee'), (null,'fff'), (null,'ggg'), (null,'hhh'), (null,'iii'), (null,'jjj'), (null,'kkk'), (null,'lll'), (null,'mmm');

测试

测试过程从三个方面测试:首先测试行锁的有效性,即测试索引项的行锁操作;其次测试行锁的升级,测试索引项操作的锁等待;最后,减少操作索引项数据,查看行锁升级的临界值。

测试前,首先建立两个mysql连接,并且将mysql的autocommit设置为0,然后进行一下各个测试。执行的sql语句为:

set autocommit=0;

1、行锁测试

在mysql客户端1上执行以下操作:

delete from test where name='ccc';

在mysql客户端2上执行以下操作:

insert into test values(null,’nnn’);

在客户端1没有提交和回滚操作之前,在客户端2上执行插入操作成功。由此可见,mysql在操作时的确是使用了行级锁。

验证结束之后,回滚操作,分别在两个客户端上执行回滚操作:

rollback;

2、行锁升级测试

在mysql客户端1上执行以下操作:

delete from test where name='aaa';

在mysql客户端2上执行以下操作:

insert into test values(null,’nnn’);

客户端1没有提交和回滚的情况下,客户端2始终处于锁等待状态。只有当在客户端1上执行回滚操作或者提交操作后,客户端2上的操作才能执行。从行锁的理论来看,这是不符的。但是当操作的数据占整个数据的比例较大时,行锁将会升级,导致其他操作处于锁等待状态。

3、行锁升级临界测试

经测试,当删除数据为5条时有锁等待4条时没有。而如果name字段上没有索引则为表锁。

mysql行级锁升级_mysql innodb 行级锁升级相关推荐

  1. mysql innodb禁用事务_MySQL InnoDB事务中锁问题(三)

    试想,事务如果都是串行的,那么就不需要锁了,但是性能肯定没法接受.加锁只是为了提高事务并行度,并且解决并发事务执行过程中引起的脏写.脏读.不可重复读.幻读这些问题的一种解决方案(MVCC算是一种解决脏 ...

  2. mysql锁级别_MySql三种级别锁的介绍及解锁命令

    MySql三种级别锁的介绍及解锁命令 (2014-04-29 11:59:37) 标签: 那末 用以 便能 页级的典型代表引擎为BDB. 表级的典型代表引擎为MyISAM,MEMORY和很久之前的IS ...

  3. mysql排他锁实例_mysql共享锁与排他锁用法实例分析

    本文实例讲述了mysql共享锁与排他锁用法.分享给大家供大家参考,具体如下: mysql锁机制分为表级锁和行级锁,本文就和大家分享一下我对mysql中行级锁中的共享锁与排他锁进行分享交流. 共享锁又称 ...

  4. mysql锁表更新_Mysql InnoDB 数据更新导致锁表

    一.数据表结构 CREATE TABLE `jx_attach` ( `attach_id` int(11) NOT NULL AUTO_INCREMENT, `feed_id` int(11) DE ...

  5. mysql命令行批量添加数据_mysql命令行批量插入100条数据命令

    先介绍一个关键字的使用: delimiter 定好结束符为"$$",(定义的时候需要加上一个空格) 然后最后又定义为";", MYSQL的默认结束符为" ...

  6. mysql命令导入导出数据_mysql命令行导入和导出数据

    MySQL中导出CSV格式数据的SQL语句样本如下: select * from test_info into outfile '/tmp/test.csv' fields terminated by ...

  7. mysql 设置字段自动增长值_mysql命令行脚本

    命令行连接 在工作中主要使用命令操作方式,要求熟练编写 打开终端,运行命令 mysql -uroot -p回车后输入密码,当前设置的密码为mysql 连接成功后如下图 退出登录 quit 和 exit ...

  8. mysql命令导入导出数据库_MYSQL命令行导入导出数据库详解

    Mysql命令行导入数据库: 1,将要导入的.sql文件移至bin文件下,这样的路径比较方便 2,同上面导出的第1步 3,进入MySQL:mysql -u 用户名 -p 如我输入的命令行:mysql ...

  9. mysql修改客户端编码命令_mysql命令行修改字符编码

    1.修改数据库字符编码 mysql> alter database mydb character set utf8 ; 2.创建数据库时,指定数据库的字符编码 mysql> create ...

最新文章

  1. 使用微软WPF技术开发产品优势究竟在那里
  2. 蓝牙小电池图标_方寸间、掌握中,omthing小方盒开箱测评
  3. 【CodeForces - 705C】Thor(模拟,STLset优化链表)
  4. antd radio设置默认选中_单选框radio总结(获取值、设置默认选中值、样式)
  5. Intellj IDEA 注册码 2018
  6. Java Generics示例教程 - 通用方法,类,接口
  7. 原生JS、jQuery 遍历方法总结
  8. 透过“简书钻”来探究简书的商业模式转变
  9. 日期范围选择类日历(增强版)
  10. USBVIEW(带已分配带宽显示功能)-电脑圈圈
  11. 城市智能交通指挥中心系统方案
  12. 什么是索引?索引有哪几种?什么时候使用索引比较好?
  13. 应付模块的R12 TRACE 和 FND Debug 文件 / FND 日志 调试
  14. 实用!7个强大的Python机器学习库!⛵
  15. 光束法空三的计算问题,误差方程的多余观测数,未知数个数、多余观测值的计算
  16. 栅格矩阵转换成邻接矩阵G2D函数
  17. 【渝粤教育】电大中专电子商务网站建设与维护 (4)作业 题库
  18. [VB程序设计创新实验教程]Chap1---VB中游戏基本要素的实现方式[1]
  19. 接口自动化测试怎么做?该怎么学习
  20. CSP登机牌条码202112-3

热门文章

  1. 【远程沟通】“云答辩”“云招聘”双管齐下,解救“最难毕业生”
  2. 重构技术架构首先解决组织架构
  3. 如何给女朋友解释什么是撞库、脱库和洗库?
  4. 微信几亿人在线的点赞、取消点赞系统,用Redis如何实现?
  5. 互联网大佬马老师于昨日教师节正式卸任,让位现任CEO张勇;华为发布新一代CloudLink视讯解决方案,普惠4K+AI;联通……...
  6. 5G精华问答 | 5G的关键无线技术是啥?
  7. axios.post提交的三种请求方式
  8. hook 循环点击事件用哪个_JS 事件循环 event loop,看完你可以答对 90% 的事件循环题...
  9. python相对引用_Python 模块相对引用
  10. linux 分割pdf,PDFBox分割PDF文档