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. es-字段类型整理(6.x及以上)

    以下为主要的数据类型,特殊的或者比较冷门的不予关注: 类型分类 子分类 具体类型 核心类型 字符串 text,keyword 整数 byte,short,integer,long 浮点 double, ...

  2. usb-host与外设通信(三)

    4.与设备之间的通信 和USB设备通信可以是同步的或者是异步的,无论是哪一种情况,你都应该创建一个新的线程来处理数据传输,这样才不会使UI线程出现阻塞.与设备建立适宜的通信,你需要获得该设备一个合适的 ...

  3. 多渠道打包工具Walle源码分析

    一.背景 首先了解多渠道打包工具Walle之前,我们需要先明确一个概念,什么是渠道包. 我们要知道在国内有无数大大小小的APP Store,每一个APP Store就是一个渠道.当我们把APP上传到A ...

  4. mysql数据库 --表操作

    一.表与表之间建关系 (1) 将所有的数据放在一张表内的弊端 表的组织结构不清晰 浪费存储时间 可扩展性极差 ---> 类似于将所有的代码写入到一个py文件中 -->解耦部分 (2) 如何 ...

  5. shell脚本输出空心等腰三角形

    第一种:(for循环) #!/bin/bash#空心等腰三角形arr=9 #定义金字塔的层数for ((i=1;i<=$arr;i++))do for ((j=1;j<=$(($arr-$ ...

  6. Aria2 Centos8 安装配置

    使用chkconfig 或者 chkconfig –list就可以看出当前系统已经设置的各个服务在各个运行级别下的开闭状态.如果我们想设置某个服务自启动或者关闭的话,那么只需要按照下面的格式使用即可 ...

  7. (补充)9.Struts2中的OGNL表达式

    OGNL表达式概述 1. OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写 * 所谓对象图,即以任意一个对象为根,通过OGNL可以访问与这个对象关 ...

  8. python编程学习day03

    1.文件操作 (1)打开文件 f = open ("文件名称",mode='' ",encoding="utf-8") mode=操作方式 encod ...

  9. mysql在win系统dos 安装版配置步骤详解

    1.准备工作 下载mysql的最新免安装版本mysql-noinstall-5.1.53-win32.zip,解压缩到相关目录,如:d:\ mysql-noinstall-5.1.53-win32.这 ...

  10. vue-cli整合axios的几种方法

    Vue这个框架现在在单页面应用方面非常受人欢迎. 基于vue-cli创建的项目怎么样才能更好地处理网络请求? 首选的应该就是axios了 这次给刚接触vue的新手介绍一下axios在vue中如何使用 ...