【0】README: 不论是加读锁还是写锁,必须要等到其他数据库连接关闭后才可以进行;

【1】添加表级读锁

1.1)多会话执行的时序操作分析:

1.2)session1执行的具体时序操作;

mysql> select * from book_tbl;
+---------+------+-----------+-------+
| rcrd_id | isbn | book_name | price |
+---------+------+-----------+-------+
|       1 | 1001 | 红楼梦    |    30 |
|       2 | 1002 | 西游记    |    60 |
+---------+------+-----------+-------+
2 rows in set (0.01 sec)mysql>
mysql> lock table book_tbl read;
Query OK, 0 rows affected (0.00 sec)mysql> select * from book_tbl;
+---------+------+-----------+-------+
| rcrd_id | isbn | book_name | price |
+---------+------+-----------+-------+
|       1 | 1001 | 红楼梦    |    30 |
|       2 | 1002 | 西游记    |    60 |
+---------+------+-----------+-------+
2 rows in set (0.00 sec)mysql> update book_tbl set isbn='1003' where id=2;
ERROR 1054 (42S22): Unknown column 'id' in 'where clause'
mysql> update book_tbl set isbn='1003' where rcrd_id=2;
ERROR 1099 (HY000): Table 'book_tbl' was locked with a READ lock and can't be updated
mysql>
mysql>
mysql> update book_tbl set isbn='1003' where rcrd_id=2;
ERROR 1099 (HY000): Table 'book_tbl' was locked with a READ lock and can't be updated
mysql>
mysql> select * from mylock_tbl;
ERROR 1100 (HY000): Table 'mylock_tbl' was not locked with LOCK TABLES
mysql>
mysql>
mysql>
mysql>
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

1.3)session2执行的具体时序操作;

mysql> select * from book_tbl;
+---------+------+-----------+-------+
| rcrd_id | isbn | book_name | price |
+---------+------+-----------+-------+
|       1 | 1001 | 红楼梦    |    30 |
|       2 | 1002 | 西游记    |    60 |
+---------+------+-----------+-------+
2 rows in set (0.00 sec)mysql> update book_tbl set isbn='1003' where rcrd_id=2;
^C -- query aborted
ERROR 1317 (70100): Query execution was interrupted
mysql>
mysql> select * from mylock_tbl;
+---------+------+
| rcrd_id | name |
+---------+------+
|       1 | a    |
|       2 | b    |
|       3 | c    |
|       4 | d    |
|       5 | e    |
+---------+------+
5 rows in set (0.00 sec)mysql>
mysql> update book_tbl set isbn='1003' where rcrd_id=2;
Query OK, 1 row affected (7.68 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> select * from book_tbl;
+---------+------+-----------+-------+
| rcrd_id | isbn | book_name | price |
+---------+------+-----------+-------+
|       1 | 1001 | 红楼梦    |    30 |
|       2 | 1003 | 西游记    |    60 |
+---------+------+-----------+-------+
2 rows in set (0.00 sec)

==================================================================

【2】添加表级写锁

(session1)

(session2)

【总结】 

  • 总结1:读锁不会阻塞读,但阻塞写; 写锁会把读和写都阻塞;
  • 总结2: 看看哪些表被加锁 了? show open tables;

【如何分析表锁定?】
可以通过检查 table_locks_waited 和 table_locks_immediate 状态变量来分析系统上的表锁定; 
show status like 'table%';

mysql> show status like 'table%';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| Table_locks_immediate      | 267   |
| Table_locks_waited         | 0     |
| Table_open_cache_hits      | 126   |
| Table_open_cache_misses    | 29    |
| Table_open_cache_overflows | 0     |
+----------------------------+-------+

这里有两个状态变量记录 mysql内部表级锁定的情况,两个变量 table_locks_immediate 和  table_locks_waited 说明如下:

  • table_locks_immediate: 产生表级锁定的次数,表示可以立即获取锁的查询次数,每获取锁,则值加1;
  • table_locks_waited:出现表级锁定争用而发生等待的次数(不能立即获取等待锁的次数,而是每等待一次则加1),此值高则说明存在较严重的表级锁争用问题;

【补充】

  • 表锁1: myisam存储引擎 的读写锁调度是写优先, 这也是 myisam 不适合做写为主的引擎。因为写锁后,其他线程不能对其做任何操作,大量的更新会使得查询很难得到锁,从而造成永远的阻塞;

多个会话对表加表级读锁和表级写锁后的操作权限分析(表级读锁+表级写锁)相关推荐

  1. 表的插入、更新、删除、合并操作_4_同时往多个表插入记录

    同时往多个表插入记录 需求描述 需求:从dept表里插入数据到3张表,当loc是NEW YORK和BOSTON时向dept_east表中插入,当当loc是CHICAGO时向dept_mid表中插入,其 ...

  2. 表的插入、更新、删除、合并操作_15_ 按照默认值更新表

    按照默认值更新表 需求描述 需求:更新deptno对应是50的dept表的loc字段成默认值. 解决方法:这里通过UPDATE TableName SET ColName=DEFAULT -的方式来更 ...

  3. excel打开后灰色不显示内容_Excel二维表转换,一分钟就够

    点击蓝字 关注我们 44个Excel 使用技巧基本方法 作为职场人,加班累如狗. 如何更轻松的工作并获得喜人的报酬便是咱们职场人一直追求的"生活哲理",说到Excel,对于办公室群 ...

  4. mysql从库执行delete停止_MySQL主库大表执行delete语句,Ctrl+C具体发生了什么分析...

    MySQL主库大表执行delete语句,Ctrl+C具体发生了什么分析 1.查看表结构 localhost.qt>show create table doctor_stats_backup\G ...

  5. table中加表单元素每行怎么验证_Validform 一行代码搞定整站的表单验证 - 文章

    Validform 一行代码搞定整站的表单验证,为什么能如此方便?插件的核心思想就是把所有的验证条件及验证提示信息绑定到每个表单元素,让验证代码在执行时只是核对表单下各元素的值是否跟绑定的验证条件相符 ...

  6. 有的QQ临时会话要求加好友

    最近做一网站,需加实时会话功能,开发一个太费劲,于是想起加qq临时会话,但加上之后,部分QQ号码打开后首先要求加为QQ好友,否则不能通话,这是什么原因呢? 于是我在系统设置里把各种限制功能测试了个遍都 ...

  7. java面试 mysql分库分表_MySQL性能管理及架构设计(三):SQL查询优化、分库分表 - 完结篇...

    一.SQL查询优化(重要) 1.1 获取有性能问题SQL的三种方式 通过用户反馈获取存在性能问题的SQL: 通过慢查日志获取存在性能问题的SQL: 实时获取存在性能问题的SQL: 1.1.2 慢查日志 ...

  8. SQL基础操作_4_表的插入、更新、删除、合并操作

    目录 表的插入.更新.删除.合并操作 7.4.1 插入新的记录 7.4.2 插入含自增列的记录 7.4.3 插入新的多条记录 7.4.4 同时往多个表插入记录 7.4.5 通过其它表插入 7.4.6 ...

  9. 分区表(表分区的具体作用、什么时候需要分区、表分区的优点)、表分区的几种类型及操作方法(range/hash/list/虚拟列/Interval/组合分区)、普通表转分区表的方法、分区表的其它操作

    文章目录 分区表(谨慎使用,了解即可) 表空间及分区表的概念 表分区的具体作用 什么时候需要分区 表分区的优点 表分区的几种类型及操作方法 范围分区(range) 哈希分区(hash) 列表分区(li ...

最新文章

  1. 基础知识:if判断、while循环、for循环
  2. 2015/Province_Java_A/3/九数分三组
  3. 并发事务正确性的准则 可串行化_从0到1理解数据库事务(上):并发问题与隔离级别...
  4. Java调用动态库 缺点_java调用动态库(dll)的一些问题
  5. linux php运行用户,Linux中普通用户如何以root身份运行命令
  6. msvcrtd.lib(crtexew.obj):error LNK2019:无法解析的外部符号WinMain@16,该符号在函数___tmainCRTStartup中被引用
  7. 【1】TFTP软件的开发
  8. 大数据工程师简历_大数据毕业生简历该怎么写?
  9. Windows登录FTP服务器方法
  10. STM32定时器输入捕获,脉宽测量知识点
  11. 争议不断的AI绘画,如今成为了顶流?
  12. IG中最多案赞数居然是一棵蛋?!网友共同合作打破美国女星记录
  13. 网络诈骗侦查公司41st Parameter获1300万美元投资 Kleiner Perkins参投
  14. iOS 逆向编程(九 - 1)通过 USB 连接登录 iPhone 以及端口映射
  15. 如何写好论文的研究局限性
  16. 2021-04-08 从SONiC SAI到TAI
  17. 第二十三课.扩散模型
  18. 微信订阅号消息列表重大更新!6点解读(必看)
  19. poi 浏览器导出 demo
  20. 深度学习的实时背景虚化

热门文章

  1. CF296B dp\容斥
  2. 【NOI2016】国王饮水记【贪心】【斜率优化】【决策单调性】
  3. Acwing1086. 恨7不成妻(未解决)
  4. [学习笔记] 二分图基础定理的相关证明
  5. [指数型生成函数专练]chocolate,红色病毒问题,排列组合,字串数
  6. P4783-[模板]矩阵求逆
  7. P5048-[Ynoi2019 模拟赛]Yuno loves sqrt technology III【分块】
  8. YbtOJ#832-鸽子饲养【凸包,Floyd】
  9. 2017西安交大ACM小学期数论 [阅兵式]
  10. 面试了 N 个候选人后,我总结出这份 Java 面试准备技巧