mysql锁 实战测试代码
| 存储引擎 | 支持的锁定 |
| MyISAM | 表级锁 |
| MEMORY | 表级锁 |
| InnoDB | 行级锁 |
| BDB | 页面锁 |
表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
| 锁定方式 | 执行锁定的线程 读 | 其他线程 读 | 执行锁定的线程 写 | 其他线程 写 |
| 读锁 | 可读 | 可读 | 不可写 | 不可写 |
| 写锁 | 可读 | 不可读 | 可写 | 不可写 |
涉及工具:Navicat和SQLyog(不能使用phpMyAdmin)
测试代码
测试一:读锁。说明:自己与其他线程只能读取该表
在Navicat中执行以下代码
mysql> lock table `cat` READ;
Query OK, rows affected mysql> SELECT * FROM `cat` WHERE ;
+----+--------+
| id | remark |
+----+--------+
| | ceshi |
| | |
| | |
+----+--------+
rows in set mysql> UPDATE `cat` SET remark= 'Navicat' WHERE id=;
- Table 'cat' was locked with a READ lock and can't be updated
在SQLyog中执行
mysql> SELECT * FROM `cat` WHERE ;
+----+--------+
| id | remark |
+----+--------+
| 1 | ceshi |
| 2 | 22222 |
| 3 | 33333 |
+----+--------+
3 rows in set
mysql> UPDATE `cat` SET remark= 'SQLyog' WHERE id=
SQLyog执行UPDATE时,一直都是执行中。当解锁时,执行成功。
在Navicat中执行解锁操作
mysql> unlock tables;
执行后,SQLyog的UPDATE执行成功。
测试结果:
当进行读锁时,锁定线程可进行查询操作,不可进行写入操作。其他线程可进行查询操作,不可进行写入操作。
测试一:写锁。说明:只有当前线程能够对表进行写入操作(其他线程也无法读这部分数据)
在Navicat中执行以下代码
mysql> LOCK TABLE cat WRITE;
Query OK, rows affected mysql> select * from `cat` where ;
+----+--------+
| id | remark |
+----+--------+
| | SQLyog |
| | |
| | |
+----+--------+
rows in set mysql> update `cat` set remark= 'Navicat' where id=;
Query OK, row affected
Rows matched: Changed: Warnings:
然后在SQLyog中执行
mysql> select * from `cat` where ;
和
mysql> update `cat` set remark= 'Navicat' where id=;
可见都是一直是执行状态。只有解锁后,SQLyog才能执行成功
在Navicat中执行解锁操作
mysql> unlock tables;
SQLyog执行成功。
测试结果:
写锁后,执行写锁的线程可进行读和写,其他线程不可进行读和写
mysql锁 实战测试代码的更多相关文章
- mysql数据库连接的测试代码语句片断
手动连接数据库 的代码片断, 用于各种数据库的测试... $conn = mysql_connect('localhost', 'root', '') or die('failed to connec ...
- php7连接mysql测试代码
php7连接mysql测试代码 <?php $mysqli = new mysqli("localhost", "root", "passwor ...
- MySQL测试代码
MySQL测试代码 # 注释内容 -- 注释内容 -- 创建maizi数据库 CREATE DATABASE IF NOT EXISTS `maizi` DEFAULT CHARACTER SET ' ...
- 使用 TypeScript & mocha & chai 写测试代码实战(17 个视频)
使用 TypeScript & mocha & chai 写测试代码实战(17 个视频) 使用 TypeScript & mocha & chai 写测试代码实战 #1 ...
- 测试MySQL锁的问题
测试MySQL锁的问题 目录 测试MySQL锁的问题 1 Record Lock 2 Next-Key Lock 2 死锁测试 InnoDB支持三种行锁: Record Lock:单个行记录上面的锁 ...
- MySQL锁系列3 MDL锁
http://www.cnblogs.com/xpchild/p/3790139.html MySQL为了保护数据字典元数据,使用了metadata lock,即MDL锁,保证在并发的情况下,结构 ...
- mysql颠覆实战笔记(三)-- 用户登录(二):保存用户操作日志的方法
版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...
- mysql颠覆实战笔记(二)-- 用户登录(一):唯一索引的妙用
版权声明:笔记整理者亡命小卒热爱自由,崇尚分享.但是本笔记源自www.jtthink.com(程序员在囧途)沈逸老师的<web级mysql颠覆实战课程 >.如需转载请尊重老师劳动,保留沈逸 ...
- Mysql锁机制--乐观锁 & 悲观锁
Mysql 系列文章主页 =============== 从 这篇 文章中,我们知道 Mysql 并发事务会引起更新丢失问题,解决办法是锁.所以本文将对锁(乐观锁.悲观锁)进行分析. 第一部分 悲观锁 ...
随机推荐
- thinkphp自动验证---$_validate
thinkphp中的自动验证 array(验证字段,验证规则,错误提示,[验证条件,附加规则,验证时间]) 1.验证字段 需要验证的表单字段名称,这个字段不一定是数据库字段,也可以是表单的一些辅助字段 ...
- C/C++内存、指针问题
转 http://wenku.baidu.com/link?url=tN9Fac-XyB2F7V7xwYcRclu464G2c8ybYMBxNXbBGQJXEEy0vJxTOzcAeVrFrqYLfj ...
- Qt界面中嵌入其他exe程序的界面,使用Qt5
下面用一个小例子来演示如何在Qt的界面中嵌入其他exe程序的界面,最终效果如下图所示.本文参考了 http://blog.csdn.net/jiaoyaziyang/article/details/4 ...
- 编译Android源码
编译版本要求 基本安装环境 ubuntu 14.04 64 sudo apt-get install git-core gnupg flex bison gperf build-essential \ ...
- VIM下的跳转练习
在vim下可以使用常用的箭头键 但是 还有其它键可以让你更快的达到目标 hjkl 这是代替箭头键功能的 H M L 跳到屏幕的顶上 中间 下方 w 跳到下一个单词的开始e 跳到单词的结束b 向后跳 g ...
- c++ 虚函数和纯虚函数
在你设计一个基类的时候,如果发现一个函数需要在派生类里有不同的表现,那么它就应该是虚的.从设计的角度讲,出现在基类中的虚函数是接口,出现在派生类中的虚函数是接口的具体实现.通过这样的方法,就可以将对象 ...
- 创建 WPF 工具箱控件
创建 WPF 工具箱控件 WPF (Windows Presentation Framework) 工具箱控件模板允许您创建 WPF 控件,会自动添加到 工具箱 安装扩展的安装. 本主题演示如何使用模 ...
- Nginx上传文件返回413的解决
通过http上传文件时返回403 Request Entity Too Large错误时,原因是默认设置的允许上传文件太小,默认是2M,如果上传文件大小大于2M时,那么就会返回413的错误,修改ngi ...
- VNC安装与使用
查看是否安装VNC:rpm -qa | grep vnc 安装VNC:rpm -ivh vnc-4.1.2-14.el5_3.1.i386.rpm ,rpm -ivh vnc-server-4.1.2 ...
- mac 下 用 glfw3 搭建opengl开发环境
mac 下 用 glfw3 搭建opengl开发环境 下载编译 glfw3 Build Setting 里面, Library Search Paths -> 设置好编译 glfw 库的路径 H ...