MySQL的lock tables和unlock tables的用法(转载)
来源:互联网 发布:淘宝客商品采集软件 编辑:程序博客网 时间:2024/05/19 18:38
sunhuaquan的专栏
MySQL的lock tables和unlock tables的用法(转载)
版权声明:本文为博主原创文章,未经博主允许不得转载。
早就听说lock tables和unlock tables这两个命令,从字面也大体知道,前者的作用是锁定表,后者的作用是解除锁定。但是具体如何用,怎么用,不太清楚。今天详细研究了下,总算搞明白了2者的用法。
lock tables 命令是为当前线程锁定表.这里有2种类型的锁定,一种是读锁定,用命令 lock tables tablename read;另外一种是写锁定,用命令lock tables tablename write.下边分别介绍:
1. lock table 读锁定
如果一个线程获得在一个表上的read锁,那么该线程和所有其他线程只能从表中读数据,不能进行任何写操作。
下边我们测试下,测试表为user表。
不同的线程,可以通过开多个命令行MySQL客户端来实现:
时刻点
线程A(命令行窗口A)
线程B(命令行窗口B)
1
mysql> lock tables user read;
Query OK, 0 rows affected (0.00 sec)
mysql>
对user表加读锁定。
2
mysql> select * from user;
+------+-----------+
| id | name |
+------+-----------+
| 22 | abc |
| 223 | dabc |
| 2232 | dddabc |
| 45 | asdsagd |
| 23 | ddddddddd |
+------+-----------+
5 rows in set (0.00 sec)
mysql>
自己的读操作未被阻塞
mysql> select * from user;
+------+-----------+
| id | name |
+------+-----------+
| 22 | abc |
| 223 | dabc |
| 2232 | dddabc |
| 45 | asdsagd |
| 23 | ddddddddd |
+------+-----------+
5 rows in set (0.00 sec)
mysql>
其他线程的读也未被阻塞
3
mysql> insert into user values(12,'test');
ERROR 1099 (HY000): Table 'user' was locked with a READ lock and can't be updated
mysql>
发现本线程的写操作被阻塞
mysql> insert into user values(22,'2test');
发现没有任何反应,一直等待中,说明没有得到写锁定,一直处于等待中。
4
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
mysql>
释放读锁定。
mysql> insert into user values(22,'ddd');
Query OK, 1 row affected (1 min 27.25 sec)
mysql>
在线程A释放读锁后,线程B获得了资源,刚才等待的写操作执行了。
5
mysql> lock tables user read local;
Query OK, 0 rows affected (0.00 sec)
mysql>
获得读锁定的时候增加local选项。
mysql> insert into user values(2,'b');
Query OK, 1 row affected (0.00 sec)
mysql>
发现其他线程的insert未被阻塞。
6
mysql> update user set name = 'aaaaaaaaaaaaaaaaaaaaa' where id = 1;
但是其他线程的update操作被阻塞了。
注意:user表必须为Myisam表,以上测试才能全部OK,如果user表为innodb表,则lock tables user read local命令可能没有效果,也就是说,如果user表为innodb表,第6时刻将不会被阻塞,这是因为INNODB表是事务型的,对于事务表,例如InnoDB和BDB,--single-transaction是一个更好的选项,因为它不根本需要锁定表
2. lock table 写锁定
如果一个线程在一个表上得到一个 WRITE 锁,那么只有拥有这个锁的线程可以从表中读取和写表。其它的线程被阻塞。
写锁定的命令:lock tables user write.user表为Myisam类型的表。
参考如下测试:
时刻点
线程A(命令行窗口A)
线程B(命令行窗口B)
1
mysql> lock tables user write;
Query OK, 0 rows affected (0.00 sec)
对user表加写锁定。
2
mysql> select * from user;
+----+-----------------------+
| id | name |
+----+-----------------------+
| 1 | aaaaaaaaaaaaaaaaaaaaa |
| 2 | b |
+----+-----------------------+
2 rows in set (0.00 sec)
自己可以继续进行读操作
mysql> select * from user;
其他线程读操作被阻塞。
3
mysql> unlock tables ;
Query OK, 0 rows affected (0.00 sec)
释放锁定。
4
mysql> select * from user;
+----+-----------------------+
| id | name |
+----+-----------------------+
| 1 | aaaaaaaaaaaaaaaaaaaaa |
| 2 | b |
+----+-----------------------+
2 rows in set (32.56 sec)
其他线程获得资源,可以读数据了。
以上所有结果均在MySQL 5.4.3下测试通过。
- 顶
- 1
- 踩
- 0
- 上一篇MySQL的lock tables和unlock tables的用法(转载)
- 下一篇jQuery Form Plugin (一) :使用AJAX提交Form表单
- • MySQL LOCK TABLES 与UNLOCK TABLES
- • MySQL详解--锁
- • MySql中Lock命令和unlock命令
- • MySQL锁阻塞分析
- • MySQL的lock tables和unlock tables的用法(转载)
- • mysql中的LOCK TABLES和UNLOCK TABLES
- • lock tables和unlock tables
- • MySQL的lock tables和unlock tables的用法
- • MySQL LOCK TABLES 与UNLOCK TABLES
- • mysql 锁表lock tables/unlock tables
- 猜你在找
- 【直播】机器学习&深度学习系统实战(唐宇迪)
- 【直播】Kaggle 神器:XGBoost 从基础到实战(冒教授)
- 【直播回放】深度学习基础与TensorFlow实践(王琛)
- 【直播】计算机视觉原理及实战(屈教授)
- 【直播】机器学习之凸优化(马博士)
- 【直播】机器学习之矩阵(黄博士)
- 【直播】机器学习之概率与统计推断(冒教授)
- 【直播】机器学习之数学基础
- 【直播】TensorFlow实战进阶(智亮)
- 【直播】深度学习30天系统实训(唐宇迪)
- 6楼 dabaicaiyihao 2016-10-23 14:30发表 [回复]
- 学习了,,,详尽,,,
- 5楼 ys347295841 2015-07-13 15:27发表 [回复]
- <?php?>
- 4楼 ys347295841 2015-07-13 15:25发表 [回复]
- ()
- 3楼 ys347295841 2015-07-13 15:25发表 [回复]
- ()
- 2楼 和平老三 2014-12-10 08:51发表 [回复]
- 学习了,,,详尽,,,
- 1楼 cash1943 2013-04-10 16:53发表 [回复]
- 学习了,,,详尽,,,
- 个人资料
- 访问:75452次
- 积分:720
- 等级:
- 排名:千里之外
- 原创:12篇
- 转载:2篇
- 译文:0篇
- 评论:7条
sunhuaquan
- 文章搜索
- 文章分类
- java学习与探索(1)
- Maven(1)
- 文章存档
- 2013年01月(1)
- 2012年10月(1)
- 2011年06月(1)
- 2011年04月(1)
- 2011年02月(2)
- 阅读排行
- MySQL的lock tables和unlock tables的用法(转载)(28676)
- px和毫米之间的转换(21350)
- JScrollBar的使用小技巧(7233)
- Java Swing Border(Swing 边框) 归纳(4529)
- Java生成mdb文件[MS Access文件](转载)(3814)
- bat,sh文件执行Java(1474)
- jQuery Form Plugin (一) :使用AJAX提交Form表单(1392)
- Maven 参考文档(1142)
- 删除复制单个文件(580)
- oracle blob数据存取(437)
- 评论排行
- MySQL的lock tables和unlock tables的用法(转载)(6)
- bat,sh文件执行Java(1)
- Java生成mdb文件[MS Access文件](转载)(0)
- oracle中的伪列rownum(0)
- 获取插入数据库记录的自动标识(0)
- 如何学好3D游戏引擎编程(0)
- 导出数据到一个Excel文件中去(0)
- 删除复制单个文件(0)
- JScrollBar的使用小技巧(0)
- Java Swing Border(Swing 边框) 归纳(0)
- 推荐文章
- * CSDN日报20170725——《新的开始,从研究生到入职亚马逊》
- * 深入剖析基于并发AQS的重入锁(ReetrantLock)及其Condition实现原理
- * Android版本的"Wannacry"文件加密病毒样本分析(附带锁机)
- * 工作与生活真的可以平衡吗?
- * 《Real-Time Rendering 3rd》 提炼总结——高级着色:BRDF及相关技术
- * 《三体》读后思考-泰勒展开/维度打击/黑暗森林
- 最新评论
- MySQL的lock tables和unlock tables的用法(转载)
dabaicaiyihao: 学习了,,,详尽,,,
- MySQL的lock tables和unlock tables的用法(转载)
ys347295841:
- MySQL的lock tables和unlock tables的用法(转载)
ys347295841: ()
- MySQL的lock tables和unlock tables的用法(转载)
ys347295841: ()
- MySQL的lock tables和unlock tables的用法(转载)
和平老三: 学习了,,,详尽,,,
- MySQL的lock tables和unlock tables的用法(转载)
cash1943: 学习了,,,详尽,,,
- bat,sh文件执行Java
lwy_ywl:
sunhuaquan的专栏
MySQL的lock tables和unlock tables的用法(转载)
版权声明:本文为博主原创文章,未经博主允许不得转载。
早就听说lock tables和unlock tables这两个命令,从字面也大体知道,前者的作用是锁定表,后者的作用是解除锁定。但是具体如何用,怎么用,不太清楚。今天详细研究了下,总算搞明白了2者的用法。
lock tables 命令是为当前线程锁定表.这里有2种类型的锁定,一种是读锁定,用命令 lock tables tablename read;另外一种是写锁定,用命令lock tables tablename write.下边分别介绍:
1. lock table 读锁定
如果一个线程获得在一个表上的read锁,那么该线程和所有其他线程只能从表中读数据,不能进行任何写操作。
下边我们测试下,测试表为user表。
不同的线程,可以通过开多个命令行MySQL客户端来实现:
时刻点
线程A(命令行窗口A)
线程B(命令行窗口B)
1
mysql> lock tables user read;
Query OK, 0 rows affected (0.00 sec)
mysql>
对user表加读锁定。
2
mysql> select * from user;
+------+-----------+
| id | name |
+------+-----------+
| 22 | abc |
| 223 | dabc |
| 2232 | dddabc |
| 45 | asdsagd |
| 23 | ddddddddd |
+------+-----------+
5 rows in set (0.00 sec)
mysql>
自己的读操作未被阻塞
mysql> select * from user;
+------+-----------+
| id | name |
+------+-----------+
| 22 | abc |
| 223 | dabc |
| 2232 | dddabc |
| 45 | asdsagd |
| 23 | ddddddddd |
+------+-----------+
5 rows in set (0.00 sec)
mysql>
其他线程的读也未被阻塞
3
mysql> insert into user values(12,'test');
ERROR 1099 (HY000): Table 'user' was locked with a READ lock and can't be updated
mysql>
发现本线程的写操作被阻塞
mysql> insert into user values(22,'2test');
发现没有任何反应,一直等待中,说明没有得到写锁定,一直处于等待中。
4
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
mysql>
释放读锁定。
mysql> insert into user values(22,'ddd');
Query OK, 1 row affected (1 min 27.25 sec)
mysql>
在线程A释放读锁后,线程B获得了资源,刚才等待的写操作执行了。
5
mysql> lock tables user read local;
Query OK, 0 rows affected (0.00 sec)
mysql>
获得读锁定的时候增加local选项。
mysql> insert into user values(2,'b');
Query OK, 1 row affected (0.00 sec)
%
- MySQL的lock tables和unlock tables的用法(转载)
- MySQL的lock tables和unlock tables的用法(转载)
- MySQL的lock tables和unlock tables的用法(转载)
- MySQL的lock tables和unlock tables的用法(转载)
- MySQL的lock tables和unlock tables的用法(转载)
- MySQL的lock tables和unlock tables的用法
- MySQL的lock tables和unlock tables的用法
- MySQL的lock tables和unlock tables的用法
- MySQL的lock tables和unlock tables的用法
- MySQL的lock tables和unlock tables的用法
- MySQL的lock tables和unlock tables的用法
- mysql的lock tables与unlock tables的用法
- MySQL的LOCK TABLES/UNLOCK TABLES
- mysql的LOCK TABLES和UNLOCK TABLES与Transactions(事务)的交互
- MySQL锁表lock tables和unlock tables
- mysql中的LOCK TABLES和UNLOCK TABLES
- mysql lock tables unlock tables
- MySQL LOCK TABLES 与UNLOCK TABLES
- 生产环境部署Hadoop+Spark+HBase+Hue
- [ RESP-API ] SwaggerUI+SpringMVC——构建RestFulAPI的可视化界面
- 【tomcat】Tomcat以debug模式启动
- Angular管道设置 :
- JAVA零基础自学笔记-JDBC篇 附带的小Demo 理解功能
- MySQL的lock tables和unlock tables的用法(转载)
- Python编码异常处理
- RTL设计基础(二)
- centos 7 开源软件开机启动配置
- 今天被分配的重启服务器的任务
- 异常
- HDU 4540 威威猫系列故事——打地鼠
- 白话经典算法系列之四 直接选择排序及交换两个数据的正确实现
- [角谷猜想 || 冰雹猜想]的一些瞎想