存储引擎 支持的锁定
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执行成功。

测试结果:

写锁后,执行写锁的线程可进行读和写,其他线程不可进行读和写

最新文章

  1. 浅谈我对 jQuery 的了解
  2. asp.net 验证码(一)Session
  3. Android 手机卫士--实现设置界面的一个条目布局结构
  4. 用U盘制作启动盘后空间变小的恢复方法,清除U盘启动盘空间
  5. Java集合中Set的常见问题及用法
  6. css —— 图片环绕+首行缩进
  7. xcode6.0 模拟器打不开
  8. 深入理解OpenERP的工作流(Workflow)
  9. 2016GIAC全球互联网架构大会日程分享
  10. 什么是体数据可视化(Volume data visualization)?及体绘制的各种算法和技术的特点?
  11. DEDECMS 漏洞修复方案
  12. 关于 Senparc.Weixin.Cache.Redis 引用的 StackExchange.Redis 版本不匹配的反馈测试
  13. Django 系列博客(十)
  14. 浏览器User-Agent大全
  15. Spring事务的5种隔离级别和7种传播性
  16. 安装archlinux的linux命令记录
  17. 安装stress模拟linux系统资源消耗
  18. 微软正式发布VS2015和.Net为开发者提供数百个新功能
  19. 排列算法(reverse...rotate...next_permutation)
  20. csr867x开发日记——常用软件工具介绍

热门文章

  1. LPC1768/1769之CAN控制器概述(附库函数下载地址)
  2. 【Python基础学习一】在OSX系统下搭建Python语言集成开发环境 附激活码
  3. oracle查询某一个字段的数量总和
  4. java13
  5. Hide JSP error icons in Eclipse
  6. WPF 线程 Dispatcher
  7. Xcode免证书调试
  8. 与你相遇好幸运,Mongodb客户端&BUGS
  9. 工欲善其事-Eclipse设置
  10. [译]:Orchard入门——导航与菜单