1、lock tables table1 read,table2 read,table3 read

igoodful@a8-apple-iphone-db00.wh(glc) > show tables;
+---------------+
| Tables_in_glc |
+---------------+
| mobile |
| user |
+---------------+
2 rows in set (0.00 sec) Fri Dec 20 17:42:35 2019
igoodful@a8-apple-iphone-db00.wh(glc) > show open tables where in_use >=1;
+----------+-------+--------+-------------+
| Database | Table | In_use | Name_locked |
+----------+-------+--------+-------------+
| glc | user | 1 | 0 |
+----------+-------+--------+-------------+
1 row in set (0.00 sec) Fri Dec 20 17:42:47 2019
igoodful@a8-apple-iphone-db00.wh(glc) > lock tables user read; ######### 添加读锁
Query OK, 0 rows affected (0.00 sec) Fri Dec 20 17:43:03 2019
igoodful@a8-apple-iphone-db00.wh(glc) > show open tables where in_use >=1; ########## 表明:添加表读锁后,表被用次数加一
+----------+-------+--------+-------------+
| Database | Table | In_use | Name_locked |
+----------+-------+--------+-------------+
| glc | user | 2 | 0 |
+----------+-------+--------+-------------+
1 row in set (0.00 sec) Fri Dec 20 17:43:08 2019
igoodful@a8-apple-iphone-db00.wh(glc) > select * from user; ########## 表明:可以读取锁住的表的数据。
+------+------+
| id | name |
+------+------+
| 1 | 1 |
| 2 | 1 |
+------+------+
2 rows in set (0.01 sec) Fri Dec 20 17:43:37 2019
igoodful@a8-apple-iphone-db00.wh(glc) > select * from mobile; ########## 表明:只能读取锁住的表的数据,不能查看没有锁住的表的数据
ERROR 1100 (HY000): Table 'mobile' was not locked with LOCK TABLES
Fri Dec 20 17:44:11 2019
igoodful@a8-apple-iphone-db00.wh(glc) >

########################################

在另一个会话线程中执行如下语句:

igoodful@a8-apple-iphone-db00.wh(glc) > select * from user;      ################# 表明:一个会话给表添加了读锁,那么不影响其他会话线程读取该表数据
+------+------+
| id | name |
+------+------+
| 1 | 1 |
| 2 | 1 |
+------+------+
2 rows in set (0.00 sec) Fri Dec 20 17:54:11 2019
igoodful@a8-apple-iphone-db00.wh(glc) > insert into user values (3,'3'); ################# 表明:一个会话给表添加了读锁,其他会话线程只能对该表进行读取,而不能对该表执行执行dml和ddl语句。
^CCtrl-C -- sending "KILL QUERY 233531" to server ...
Ctrl-C -- query aborted.
ERROR 1317 (70100): Query execution was interrupted
Fri Dec 20 17:55:59 2019
igoodful@a8-apple-iphone-db00.wh(glc) > select connection_id();
+-----------------+
| connection_id() |
+-----------------+
| 233531 |
+-----------------+
1 row in set (0.00 sec) Fri Dec 20 17:57:07 2019
igoodful@a8-apple-iphone-db00.wh(glc) > show open tables where in_use>0;;
+----------+-------+--------+-------------+
| Database | Table | In_use | Name_locked |
+----------+-------+--------+-------------+
| glc | user | 2 | 0 |
+----------+-------+--------+-------------+
1 row in set (0.00 sec) ERROR:
No query specified Fri Dec 20 17:57:25 2019
igoodful@a8-apple-iphone-db00.wh(glc) > lock tables user read; ################# 表明:多个会话线程可以对同一张表添加读锁。
Query OK, 0 rows affected (0.00 sec) Fri Dec 20 17:57:57 2019
igoodful@a8-apple-iphone-db00.wh(glc) >

一、表的读锁

如果一个会话线程执行了:lock tables table1  read, table2  read;

则有:

)、该会话线程只能查询锁定的这几个表(table1,table2)的数据,没有被锁定的表,不能查询其数据

)、其他事务不能对这两张表进行ddl、dml操作和write表锁

)、其他会话可以对这两个表添加read锁,即表的读锁是共享锁,可以多个会话线程同时添加,互不影响

)、这两张表当前被查询使用次数分别增加1,当执行会话执行 unlock tables语句时,这两张表当前被查询使用使用次数分别减1
igoodful@a8-apple-iphone-db00.wh(glc) > show open tables;
+--------------------+-------------------+--------+-------------+
| Database | Table | In_use | Name_locked |
+--------------------+-------------------+--------+-------------+
| glc | mobile | 0 | 0 |
| mysql | db | 0 | 0 |
| test | host | 0 | 0 |
| performance_schema | session_variables | 0 | 0 |
| glc | user | 2 | 0 |
| test | user | 0 | 0 |
| mysql | user | 0 | 0 |
+--------------------+-------------------+--------+-------------+
7 rows in set (0.00 sec) Fri Dec 20 18:16:10 2019
igoodful@a8-apple-iphone-db00.wh(glc) > ##################################################################
1、出现在里面的表,表示的是:这些表都是打开的,且不是临时表。
2、如果In_use字段为0,则表示该表当前是被打开的状态,但是当前没有被使用。
3、如果In_use字段为2,则表示该表当前是被打开的状态,且正在被使用次数为2。
################################################################## igoodful@a8-apple-iphone-db00.wh(glc) > show open tables;
+--------------------+-------------------+--------+-------------+
| Database | Table | In_use | Name_locked |
+--------------------+-------------------+--------+-------------+
| glc | mobile | 0 | 0 |
| mysql | db | 0 | 0 |
| test | host | 0 | 0 |
| performance_schema | session_variables | 0 | 0 |
| glc | user | 2 | 0 |
| test | user | 0 | 0 |
| mysql | user | 0 | 0 |
+--------------------+-------------------+--------+-------------+
7 rows in set (0.00 sec) Fri Dec 20 18:16:10 2019
igoodful@a8-apple-iphone-db00.wh(glc) > flush tables;
Query OK, 0 rows affected (47.94 sec) Fri Dec 20 18:22:19 2019
igoodful@a8-apple-iphone-db00.wh(glc) > show open tables;
Empty set (0.00 sec) Fri Dec 20 18:23:00 2019 ###########################################################################
1、flush tables会将缓存的所有表全部清空,即要读取这些表的数据就必须从磁盘加载到缓存。
2、当缓冲数目已经超过了table_open_cache设置的值,mysql开始使用LRU算法释放表对象。
3、当缓冲区已满,而连接想要打开一个不在缓冲中的表时。
##########################################################

二、表的写锁

如果一个会话线程执行了:lock tables table1  write, table2  write;

则有:

)、该会话线程只能查询锁定的这几个表(table1,table2)的数据,没有被锁定的表,不能查询其数据

)、其他事务不能对这两张表进行ddl、dml操作、read表锁、write表锁,select读取这两张表也不行,表的写锁是互斥锁。

)、这两张表当前被查询使用次数分别增加1,当执行会话执行 unlock tables语句时,这两张表当前被查询使用使用次数分别减1

3、表的解锁

LOCK TABLES语句为当前会话显式的获取表锁。
UNLOCK TABLES语句为当前会话显式的释放所有表锁(读写)。
lock tables与unlock tables只能为自己获取锁和释放锁,不能为其他会话获取锁,也不能释放由其他会话保持的锁。
一个对象获取锁,需具备该对象上的SELECT权限和LOCK TABLES权限。
#####################################################################
####################################################################
1、但是当会话发出另外一个LOCK TABLES时,当前会话锁定的所有表会隐式被解锁;
2、当服务器的连接被关闭时,当前会话锁定的所有表会隐式被解锁;

lock tables和unlock tables的更多相关文章

  1. LOCK TABLES和UNLOCK TABLES与Transactions的交互

    LOCK TABLES对事务不安全,并且在试图锁定表之前隐式提交任何活动事务. UNLOCK TABLES只有在LOCK TABLES已经获取到表锁时,会隐式提交任何活动事务.对于下面的一组语句,UN ...

  2. 14.3.5 LOCK TABLES and UNLOCK TABLES Syntax

    14.3.5 LOCK TABLES and UNLOCK TABLES Syntax LOCK TABLES tbl_name [[AS] alias] lock_type [, tbl_name ...

  3. MySQL中lock tables和unlock tables浅析

    MySQL中lock tables和unlock tables浅析   在MySQL中提供了锁定表(lock tables)和解锁表(unlock tables)的语法功能,ORACLE与SQL Se ...

  4. LOCK TABLES 和 UNLOCK TABLES

    MySQLdump的时LOCK TABLES 和 UNLOCK TABLES 在mysqldump后的数据中会发现有 LOCK TABLES tables_name WRITE;和结尾处有 UNLOC ...

  5. MySQL的lock tables和unlock tables的用法(转载)

    早就听说lock tables和unlock tables这两个命令,从字面也大体知道,前者的作用是锁定表,后者的作用是解除锁定.但是具体如何用,怎么用,不太清楚.今天详细研究了下,总算搞明白了2者的 ...

  6. mysql中lock tables与unlock tables

    官网:https://dev.mysql.com/doc/refman/5.0/en/lock-tables.html LOCK TABLES tbl_name [[AS] alias] lock_t ...

  7. MySQL LOCK TABLES 与UNLOCK TABLES

    http://blog.csdn.net/zyz511919766/article/details/16342003 1语法 LOCK TABLES tbl_name[[AS] alias] lock ...

  8. mysql中lock tables与unlock tables(锁表/解锁)使用总结

    php mysql lock tables 使用有感 mysql 的 表锁 lock tables 感觉就像一个 封闭的空间 mysql发现 lock tables 命令的时候,会将带有锁标记的表(t ...

  9. 关于 ReentrantLock 中锁 lock() 和解锁 unlock() 的底层原理浅析

    关于 ReentrantLock 中锁 lock() 和解锁 unlock() 的底层原理浅析 如下代码,当我们在使用 ReentrantLock 进行加锁和解锁时,底层到底是如何帮助我们进行控制的啦 ...

随机推荐

  1. js导出复杂表头(多级表头)的excel

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Pandas之read_excel()和to_excel()函数解析

    read_excel() 加载函数为read_excel(),其具体参数如下. read_excel(io, sheetname=0, header=0, skiprows=None, skip_fo ...

  3. Linux编程获取本机IP地址

    使用函数getifaddrs来枚举网卡IP,当中使用到的结构体例如以下所看到的: struct ifaddrs { struct ifaddrs *ifa_next; /* Next item in ...

  4. CSS兼容问题资料汇集

    CSS兼容问题一直困扰着CSSer,面对各浏览器,往往感觉束手无策,愁眉不展.CSS Hack是在标准CSS没办法兼容各浏览器显示效果时才会用上的补救方法,在各浏览器厂商解析CSS没有达成一致前,我们 ...

  5. Mongodb安装遇到的问题

    今天我第一次接触MongoDB,在安装过程中,因为对这个东西不了解,报错了我也不知道是哪里的错,还在网上查了半天资料,后来我懂了,感觉上午就是在浪费时间,是我没睡醒,没睡醒.. 在安装上MongoDB ...

  6. 开启SSH 使用SSH登录工具连接虚拟机

    修改sshd_config文件,命令为:vi /etc/ssh/sshd_config将#PermitRootLogin without-password注释去掉修改为PermitRootLogin ...

  7. cehsi

    weibo https://oapi.dingtalk.com/robot/send?access_token=8c9ef96c99925383347c5f9f733ad6b8579c3f8ad072 ...

  8. 二分图hall定理应用+二分+双指针——cf981F(好题)

    /* 二分答案,判mid是否合法 如何判断:如果是在直线上,那么遍历匹配即可 现在在环上,即既可以向前匹配也可以向后匹配,那么将环拆开,扩展成三倍 显然a和b的匹配边是不可能交叉的,因为交叉必定没有不 ...

  9. spark在不同环境下的搭建|安装|local|standalone|yarn|HA|

    spark的集群环境安装搭建 1.spark local模式运行环境搭建 常用于本地开发测试,本地还分为local单线程和local-cluster多线程; 该模式被称为Local[N]模式,是用单机 ...

  10. 用pytorch进行CIFAR-10数据集分类

    CIFAR-10.(Canadian Institute for Advanced Research)是由 Alex Krizhevsky.Vinod Nair 与 Geoffrey Hinton 收 ...