1. 14.3.5 LOCK TABLES and UNLOCK TABLES Syntax
  2.  
  3. LOCK TABLES
  4. tbl_name [[AS] alias] lock_type
  5. [, tbl_name [[AS] alias] lock_type] ...
  6.  
  7. lock_type:
  8. READ [LOCAL]
  9. | [LOW_PRIORITY] WRITE
  10.  
  11. UNLOCK TABLES
  12.  
  13. MySQL让客户端sessions 获得表锁明确的用于配合其他会话访问表,或者阻止其他会话修改表 在一个session
  14.  
  15. 需要排它访问它们时。一个session可以获得或者释放它自己的锁。
  16.  
  17. 一个会话不能获得锁对于其他会话或者释放被其他会话持有的锁。
  18.  
  19. 锁可以用于模拟事务或者得到更快的速度当更新表时, 这在本节中有更详细的解释:
  20.  
  21. LOCK TABLES 显示的获得表锁用于当前客户端sessionTables locks 可以获得对于基表或者视图。
  22.  
  23. 你必须有LOCK TABLES的权限,SELECT 权限对于每个被锁定的对象。
  24.  
  25. 对于视图locking,LOCK TABLES 增加所有视图里的所有基表 到表集合被锁定,自动锁定它们。
  26.  
  27. 如果你明确的lock 一个表 使用LOCK TABLES,任何表用于触发器的也会被锁定。
  28.  
  29. UNLOCK TABLES 显示的释放任何表的锁 被当前会话持有的。
  30.  
  31. LOCK TABLES 隐式的释放任何被当前会话持有的锁 在获得新的锁前
  32.  
  33. 另外使用UNLOCK TABLES 是释放global read lock 通过FLUSH TABLES WITH READ LOCK语句获得,
  34.  
  35. 让你lock 所有数据库的所有表
  36.  
  37. 一个table lock只保护不合适的写和读通过其他会话。一个会话持有一个WRITE LOCK 可以执行表级操作
  38.  
  39. 比如DROP TABLE or TRUNCATE TABLE.
  40.  
  41. 下面的讨论只 应用于 non-TEMPORARY tables.
  42.  
  43. LOCK TABLES 是被允许的对对于一个 TEMPORARY table.
  44.  
  45. 表可以被自由访问 通过session,无论什么其他的锁可能生效,No lock 是需要的 因为其他会话看不到表。
  46.  
  47. 锁定获取规则:
  48.  
  49. 获得表锁 在当前会话,使用LOCK TABLES 语句,下面lock types 是可用的:
  50.  
  51. READ [LOCAL] lock:
  52.  
  53. 1.session 持有锁可以read表但是不能写
  54.  
  55. 2.多个会话可以获得一个READ lock 对于一个表在同一时间
  56.  
  57. 3.其他会话可以读表,而无需显示地获取READ lock.
  58.  
  59. 4.LOCAL 修饰符让非冲突的INSERT语句(并发inserts)通过其他会话执行,当锁被持有时。
  60.  
  61. 然而, READ LOCAL 不能被使用如果你是处理数据库使用处理外部到servver 当你持有锁时,
  62.  
  63. 对于InnoDB,READ LOCAL is the same as READ.
  64.  
  65. 低优先级 WRITE lock:
  66.  
  67. 1. session 持有lock 可以读和写表
  68.  
  69. 2.只有session 持有lock 可以访问表,其他session 不能访问表知道lock被释放
  70.  
  71. 3.Lock 请求对于表通过其他会话 会被堵塞 WRITE lock被持有
  72.  
  73. 4.LOW_PRIORITY 修饰符没有作用,它是MYSQL以前的版本
  74.  
  75. 如果LOCK TABLES 语句必须等待由于lock被其他会话持有,它被堵塞直到所有的locks 可以被获取
  76.  
  77. 一个会话需要获得locks 必须获得所有的locks 需要一个单独的LOCK TABLES 语句。
  78.  
  79. locks 因此得到是被保持, session 可以只可以访问被锁定的表。例子,下面的语句的顺序,
  80.  
  81. 一个错误发生对于尝试访问t2,因为不是被锁定的 LOCK TABLES 语句。
  82.  
  83. mysql> start transaction;
  84. Query OK, 0 rows affected (0.00 sec)
  85.  
  86. mysql> lock table test read;
  87. Query OK, 0 rows affected (0.00 sec)
  88.  
  89. mysql> select * from test;
  90. +------+-------+
  91. | id | name |
  92. +------+-------+
  93. | NULL | a |
  94. | 2 | b |
  95. | 3 | c |
  96. | 1 | a0101 |
  97. | 4 | a |
  98. | 4 | a |
  99. | 5 | c |
  100. | 10 | aa |
  101. | 10 | aa |
  102. +------+-------+
  103. 9 rows in set (0.00 sec)
  104.  
  105. mysql> select * from xx;
  106. ERROR 1100 (HY000): Table 'xx' was not locked with LOCK TABLES
  107.  
  108. mysql> select user,host from mysql.user;
  109. ERROR 1100 (HY000): Table 'user' was not locked with LOCK TABLES
  110.  
  111. 表在INFORMATION_SCHEMA 是一个例外, 它们可以摆访问不需要被明确的锁定,即使当一个会话持有表locks 通过lock tables.
  112.  
  113. 你不能指向一个locked table 多次 在一个单独的查询 使用相同的名字,使用别名代替,得到一个单独的多对于表和每个别名
  114.  
  115. mysql> LOCK TABLE t WRITE, t AS t1 READ;
  116. mysql> INSERT INTO t SELECT * FROM t;
  117. ERROR 1100: Table 't' was not locked with LOCK TABLES
  118. mysql> INSERT INTO t SELECT * FROM t AS t1;
  119.  
  120. 第一个插入的错误发生 ,因为有2个引用到相同的表 对于一个锁定的表。
  121.  
  122. 2INSERT 成功因为 引用到表使用不同的名字
  123.  
  124. 如果你的语句指向一个表通过一个别名,你必须lock table 使用相同的alias.
  125.  
  126. 它不会锁定表不指定别名
  127.  
  128. mysql> LOCK TABLE t READ;
  129. mysql> SELECT * FROM t AS myalias;
  130. ERROR 1100: Table 'myalias' was not locked with LOCK TABLES
  131.  
  132. 相反,如果你lock一个表使用一个alias,你必须指向它在你的语句使用alais:
  133.  
  134. mysql> LOCK TABLE t AS myalias READ;
  135. mysql> SELECT * FROM t;
  136. ERROR 1100: Table 't' was not locked with LOCK TABLES
  137. mysql> SELECT * FROM t AS myalias;
  138.  
  139. WRITE 锁通常有更好的优先级相比READ locks 来确保更新是尽可能快的处理。
  140.  
  141. 这意味着如果一个session 得到一个READ lock 和然后其他的session 请求一个WRITE lock,
  142.  
  143. 随后的READ lock 请求等待直到session 请求到的WRITE lock已经得到lock
  144.  
  145. lock tabls 需要locks如下:
  146.  
  147. 1.排序所有的tables 被锁定在一个内部定义的顺序,从用户角度看,这个顺序是不确定的。
  148.  
  149. 2.如果表是被锁定使用一个read 和一个write lock,放置write lock 请求在read lock 请求前
  150.  
  151. 3.锁定一个表一次 直到会话得到所有的locks
  152.  
  153. 锁释放规则:
  154.  
  155. 当一个table locks 被一个会话持有被释放,它们都被释放在相同的时间。
  156.  
  157. 一个session 可以释放它自己的锁,或者locks 可以被影式释放。
  158.  
  159. 1.一个session 可以显示的释放它的锁
  160.  
  161. 2. 如果一个会话执行一个LOCK TABLES 语句来获得一个Lock当已经被持有了,
  162.  
  163. 它的存在的锁会被隐式的释放 在新的锁被授予前
  164.  
  165. 如果一个会话开始一个事务(比如, 使用START TRANSACTION),一个隐式的UNLCOK TABLES是被执行,
  166.  
  167. 会导致存在的表的锁被释放
  168.  
  169. mysql> lock table test read;
  170. Query OK, 0 rows affected (0.00 sec)
  171.  
  172. mysql> insert into test values(99,'aqs');
  173. ERROR 1099 (HY000): Table 'test' was locked with a READ lock and can't be updated
  174. mysql> start transaction;
  175. Query OK, 0 rows affected (0.00 sec)
  176.  
  177. mysql> insert into test values(99,'aqs');
  178. Query OK, 1 row affected (0.00 sec)

14.3.5 LOCK TABLES and UNLOCK TABLES Syntax的更多相关文章

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

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

  2. MySQL中lock tables和unlock tables浅析

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

  3. LOCK TABLES 和 UNLOCK TABLES

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

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

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

  5. lock tables和unlock tables

    1.lock tables table1 read,table2 read,table3 read igoodful@a8-apple-iphone-db00.wh(glc) > show ta ...

  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. 14.8.4 Moving or Copying InnoDB Tables to Another Machine 移动或者拷贝 InnoDB 表到另外机器

    14.8.4 Moving or Copying InnoDB Tables to Another Machine 移动或者拷贝 InnoDB 表到另外机器 这个章节描述技术关于移动或者复制一些或者所 ...

随机推荐

  1. freebsd安装和图形界面安装

    通过上述的安装以后只有命令行界面,没有图形界面,如果想使用X Window就需要安装X 11和GNOME(或KDE). 1. 安装X 11(用root账户) 在确保虚拟机的CD-ROM加载了FreeB ...

  2. 动态加载JS过程中如何判断JS加载完成

    在正常的加载过程中,js文件的加载是同步的,也就是说在js加载的过程中,浏览器会阻塞接下来的内容的解析.这时候,动态加载便显得尤为重要了,由于它是异步加载,因此,它可以在后台自动下载,并不会妨碍其它内 ...

  3. c# 控制IE浏览器

    原文 http://www.cnblogs.com/love2wllw/archive/2010/05/19/1739327.html 想写一个桌面程序,用C#.程序运行后,会用IE打开指定的网页,并 ...

  4. bzoj1675 [Usaco2005 Feb]Rigging the Bovine Election 竞选划区

    Description It's election time. The farm is partitioned into a 5x5 grid of cow locations, each of wh ...

  5. 瑞柏匡丞:App对新媒体的影响

    当下App的迅猛发展是媒体进入开放平台时代的折射,作为最具新媒体特质的代表,App充满了社交性与交互性,并有效整合了传统媒体和新媒体的内容和服务.“什么是新媒体”——这个新媒体时代最为核心的命题,实际 ...

  6. UVA 712-S-Trees(满二叉树的简单查询)

    题意:给一棵满二叉树,叶子节点赋予权值,0或者1,对于每个查询输出叶子节点的权值,每个查询0代表往左走,1代表往右走,这题坑的地方是层的访问顺序,如第二组测试,由上到下依次是x3,x1,x2,假如给一 ...

  7. Number of Containers(数学) 分类: 数学 2015-07-07 23:42 1人阅读 评论(0) 收藏

    Number of Containers Time Limit: 1 Second Memory Limit: 32768 KB For two integers m and k, k is said ...

  8. tangible T4 Editor 2.2.3 for VS2010 / VS2012 / VS2013 Preview

    tangible T4 Editor 2.2.3 for VS2010 / VS2012 / VS2013 Preview angible T4 Editor 2.2.3 plus UML model ...

  9. 找不到eth0,但能找到eth1的问题解决办法

    故障现象:Linux的网卡由eth0变成了eth1,如何修复?解决方案:在linux中,udev记录网络规则的脚本为:/etc/udev/rules.d/70-persistent-net.rules ...

  10. C语言头文件组织

    一.全局变量单独编写(很值得借鉴). 一般习惯将不同功能模块放到一个头文件和一个C文件中. 例如是写一些数学计算函数: //mymath.h #ifndef _mymath_H #define _my ...