http://blog.itpub.net/15480802/viewspace-755980/
用户必须拥有lock tables和select权限;
锁和写锁,优先处理写锁,除非使用了low_priority,但此选项对开启事务的innodb无效
一次只锁定一个表,但释放时同时执行
必须一次锁定所有要访问的表,否则会抱错,而information_schema下的表不需要显示锁定也可访问
LOCK TABLES t1 READ, t2 WRITE;
不能在一条sql中引用2次被锁定的表,即便使用也必须改用alias别名
LOCK TABLE t WRITE, t AS t1 READ;
表锁仅阻止其他会话进行读写操作,若当前会话拥有某个表的锁,可执行drop table,但不可执行truncate table;
所有的单个update语句会默认获取表锁;
当对表进行insert delayed时不可对其添加表锁,否则insert delayed会报错,只因该insert由一个单独线程操作;
释放表锁
1 调用unlock tables,必须由执行Lock tables的同一会话执行
2 若会话再次调用lock tables,则其原本获取到的锁会被隐式释放
3 开启事务会隐含调用unlock tables,诸如start transaction
4 占有锁的会话一旦终止其锁会被自动释放,事务也会被回滚
5 rollback不会释放表锁
表锁与事务
Lock tables会隐式提交当前事务,unlock tables只有在已经调用lock tables的前提下才会隐式commit;
开启事务(诸如start transaction)会释放当前获取的表锁;
Flush tables with read lock获取的是全局锁,而非表锁
表锁与InnoDB
对于Innodb表,若要使用表锁,必须先设置autocommit=0且innodb_table_locks=1(默认),否则InnoDB无法侦测表锁而Mysql也无法感知行锁的存在;
且在事务提交后再unlock tables,如下例所示:
调用lock tables时,innodb引擎会获取内部表锁,然后mysql服务器获取表锁;commit时innodb释放内部表锁,unlock tables时mysql服务器才释放表锁;
如果autocommit=1,innodb不会获取内部表锁,极易导致死锁发生;
Lock tables与触发器
如果基表上建有触发器,且触发器引用到了其他表,则锁定基表时会连带锁定这些被引用的表
相关推荐
MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景。而且,一旦alter table TableA的操作停滞在...如果是产品环境的核心表出现了这样的锁等待队列,就会造成灾难性的后果。
主要介绍了MYSQL锁表问题的解决方法,结合实例形式分析了MySQL锁表问题的常见情况与相应解决方法,需要的朋友可以参考下
mysql锁表1
本文实例讲述了Yii+MYSQL锁表防止并发情况下重复数据的方法。分享给大家供大家参考,具体如下: lock table 读锁定 如果一个线程获得在一个表上的read锁,那么该线程和所有其他线程只能从表中读数据,不能进行任何写...
MySQL锁类型以及查询锁表问题、解锁MySQL中select * for update锁表的范围MySQL中select * for update锁表的问题由
页级的典型代表引擎为BDB。...2)、进行查询时比页级锁和表级锁需要的I/O要多,所以我们经常把行级锁用在写操作而不是读操作。 3)、容易出现死锁。 对于写锁定如下: 1)、如果表没有加锁,那么对其加写锁定。
MySQL锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);BDB存储引擎采用的是页面锁...
值得学习的MySQL行级锁、表级锁、页级锁详细介绍
MYSQL锁机制全揭秘,锁对数据库而言显得尤其重要,也更加复杂。
系统介绍mysql锁机制
您可能感兴趣的文章:浅谈MySQL临时表与派生表Mysql跨表更新 多表update sql语句总结mysql锁表和解锁语句分享MySQL中基本的多表连接查询教程MySQL表字段设置默认值(图文教程及注意细节)MySQL中使用表别名与字段别名...
下面这个语句是锁定一行数据,开始读取,一直到删除后都不会有第二个人也读到这条数据
MySQL提供了LOCK TABLES语句来锁定当前线程的表,语法格式如下: LOCK TABLES tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE} 说明: 表锁定支持以下类型的锁定。 READ:读锁定,确保用户可以读取表,...
MySQL锁与事务知识脑图
MySQL锁详解,锁还是非常重要的,无论解决工作的死锁还是面试都会有
资源名称:mysql锁详解资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。