mysql行级锁升级_mysql innodb 行级锁升级

创建数据表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字段上没有索引则为表锁。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql触发器可以使用正则表达式,是否可以使用正则表达式在MySQL中强制执行数据检查...

Suppose I have an attribute called phone number and I would like to enforce certain validity on the entries to this field. Can I use regular expression for this purpose, since Regular Expression is very flexible at defining constraints.解决方案Yes, you can…

c 调用mysql密码为空_C语言连MySQL - osc_srnunz15的个人空间 - OSCHINA - 中文开源技术交流社区...

连接例程用C语言连接MySQL数据库包含两个步骤“初始化一个连接句柄结构;实际进行连接。初始化连接句柄#includeMYSQL *mysql_init(MYSQL *);通常传递NULL给这个例程,它会返回一个指向新分配的连接句柄结构的指针。如果传递一个已有的结构,它将…

mysql怎么分组查询所有数据库_Mysql-4 分组查询与子查询

1、查询结果的分组操作a、分组允许把数据分为多个组,以便能对每个组进行聚集计算b、分组是在select语句的group by 子句中建立的注意:group by 只是创建分组,但并不保证分组里面的数据的排列顺序,需要使用order by 子句对分组里面…

mysql 多列union_Mysql联合查询UNION和UNION ALL的使用介绍

一、UNION和UNION ALL的作用和语法UNION 用于合并两个或多个 SELECT 语句的结果集,并消去表中任何重复行。UNION 内部的 SELECT 语句必须拥有相同数量的列,列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同.SQL UNION…

mysql导数据出指定数量_mysql导出指定数据或部份数据的方法

这个时候mysqldump可能就不大好使了,使用下面的方法则可以解决这个问题。方法一、insert和select结合使用1、新建一个表,比如new-table,包含所要导出的字段的名称,比如a,b,c2、使用insert into new-table (a,b,c) select a,b,c fr…

mysql update upper_MySQL数据处理函数upper、abs、date

1. 数据处理函数文本处理函数upper()转换大写函数SQL> select vend_name, upper(vend_name) as vend_name_upcase from vendors order by vend_name;soundex()发音类似函数SQL> select cust_name, cust_contact from customers where cust_contact Y. Lie;SQL> selec…

mysql与django交互_django与mysql交互

查看ubuntu已安装的所有软件:查看软件安装的路径查看开机启动的软件,需要额外安装插件:安装mysql:django setting配置:在model模块中添加如下建表语句:vi app/models.pymodel模块在app中,其中定…

深度系统如何安装mysql_deepin 安装mysql apache

# 如果MYSQL安装成功,就会有my-medium.cnfcp /usr/local/src/mysql-5.5.17/support-files/my-medium.cnf/etc/my.cnf# 设置权限chmod x /usr/local/mysqlchown -R mysql:mysql /usr/local/mysql# 配置开机自启动cp support-files/mysql.server /etc/init.d/mysqldch…

自动清理mysql的lock进程的脚本_自动清理MySQL的Lock进程的脚本

自动清理MySQL的Lock进程的脚本作者:小涵 | 来源:互联网 | 2018-07-13 21:01阅读: 915最近数据库服务器在某一时段进程数忽然暴增,导致数据库服务器死掉,根据日志查询,是由于Mysql大量Lock进程造成服务器进程数过高导致…

java 获取类方法_Java之反射机制三:获取类的方法

一.实体类BigDog.javapackage reflex;public class BigDog extends Dog {private Integer age;public String name;public BigDog(){}private void getDog(){}private BigDog(Integer age, String name) {this.age age;this.name name;}public String getName() {return name…

java 判断客户端_javaweb服务端判断客户端使用的是手机还是电脑访问

public class ToolCheckAgentIsMobile {private final static String[] agent { "Android", "iPhone", "iPod", "iPad", "Windows Phone", "MQQBrowser" };/*** 判断User-Agent 是不是来自于手机** param ua* re…

java thread 多线程_java用Thread方式创建多线程

进程:一个正在执行的程序,每一个进程都有一个执行顺序,该顺序是一个执行路径,或者叫一个控制单元。线程:进程中一个独立的控制单元。线程控制着进程的执行。一个进程中至少有一个线程。java VM中至少有一个线程负责jav…

微信红包接口 java_【java微信开发】红包接口调用

//import相关类import java.io.FileInputStream;import java.security.KeyStore;import java.util.Date;import java.util.List;import java.util.Map;import javax.net.ssl.KeyManagerFactory;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLSocketFactory;import …

java多个类调用_JAVA问题总结之15-多个类之间的调用

JAVA问题总结之15-多个类之间的调用:代码:package java3;public class test1 {public static void main(String[] args){Pretimive t new Pretimive();for (int i0;iSystem.out.println(t.b[i]);}System.out.print("\n");t.b[0]true;t.b[2]tr…

java语言50到100之间素数和_用JAVA语言编写一程序,求100以内的所有素数

满意答案fdewj5902017.02.13采纳率&#xff1a;40% 等级&#xff1a;9已帮助&#xff1a;316人12345678910111213141516171819public static void main(String[] args) { for (int i 2; i < 100; i) { int temp (int) Math.sqrt(i); …

java矩阵面积_Java基础 矩阵面积

提供 数据结构与算法题目 的平台是LintCode&#xff0c;参考链接是&#xff1a;http://www.lintcode.com/zh-cn/问题描述&#xff1a;参考代码&#xff1a;public class Rectangle {/** Define two public attributes width and height of type int.*/// write your code herep…

java 字母冒泡排序_java实现冒泡排序

冒泡排序冒泡排序(Bubble Sort)&#xff0c;是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列&#xff0c;依次比较两个相邻的元素&#xff0c;如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元…

java修饰符的访问权限_java项目中修饰符的访问权限有哪些

java项目中修饰符的访问权限有哪些发布时间&#xff1a;2020-11-17 15:05:33来源&#xff1a;亿速云阅读&#xff1a;67作者&#xff1a;Leah这篇文章给大家介绍java项目中修饰符的访问权限有哪些&#xff0c;内容非常详细&#xff0c;感兴趣的小伙伴们可以参考借鉴&#xff0c…

java判断线程是否wait_Java并发编程之线程间通讯(上)wait/notify机制

线程间通信如果一个线程从头到尾执行完也不和别的线程打交道的话&#xff0c;那就不会有各种安全性问题了。但是协作越来越成为社会发展的大势&#xff0c;一个大任务拆成若干个小任务之后&#xff0c;各个小任务之间可能也需要相互协作最终才能执行完整个大任务。所以各个线程…

opensips mysql 认证_基于ubuntu中使用mysql实现opensips用户认证的解决方法

1 MySQL支持1.1 MySQL模块支持默认安装时&#xff0c;不包含MySQL模块。opensipsctlrc文件中包含了数据库配置的信息&#xff0c;要想让opensips支持mysql数据库&#xff0c;在编译安装的时候就要支持mysql模块。方法如下&#xff1a;(1)修改opensips中的Makefile.conf&#xf…