`

mysql 锁表

 
阅读更多

 

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锁表解表

    MySQL在进行alter table等DDL操作时,有时会出现Waiting for table metadata lock的等待场景。而且,一旦alter table TableA的操作停滞在...如果是产品环境的核心表出现了这样的锁等待队列,就会造成灾难性的后果。

    MYSQL锁表问题的解决方法

    主要介绍了MYSQL锁表问题的解决方法,结合实例形式分析了MySQL锁表问题的常见情况与相应解决方法,需要的朋友可以参考下

    mysql锁表1

    mysql锁表1

    Yii+MYSQL锁表防止并发情况下重复数据的方法

    本文实例讲述了Yii+MYSQL锁表防止并发情况下重复数据的方法。分享给大家供大家参考,具体如下: lock table 读锁定 如果一个线程获得在一个表上的read锁,那么该线程和所有其他线程只能从表中读数据,不能进行任何写...

    MySQL锁类型以及子查询锁表问题、解锁1

    MySQL锁类型以及查询锁表问题、解锁MySQL中select * for update锁表的范围MySQL中select * for update锁表的问题由

    mysql锁表和解锁语句分享

    页级的典型代表引擎为BDB。...2)、进行查询时比页级锁和表级锁需要的I/O要多,所以我们经常把行级锁用在写操作而不是读操作。 3)、容易出现死锁。 对于写锁定如下: 1)、如果表没有加锁,那么对其加写锁定。

    MYSQL 解锁与锁表介绍

    MySQL锁概述   相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);BDB存储引擎采用的是页面锁...

    值得学习的MySQL行级锁、表级锁、页级锁详细介绍

    值得学习的MySQL行级锁、表级锁、页级锁详细介绍

    MYSQL锁机制全揭秘

    MYSQL锁机制全揭秘,锁对数据库而言显得尤其重要,也更加复杂。

    mysql 锁机制及mysql中的锁介绍.pdf

    系统介绍mysql锁机制

    mysql 数据表中查找重复记录

    您可能感兴趣的文章:浅谈MySQL临时表与派生表Mysql跨表更新 多表update sql语句总结mysql锁表和解锁语句分享MySQL中基本的多表连接查询教程MySQL表字段设置默认值(图文教程及注意细节)MySQL中使用表别名与字段别名...

    mysql 锁表锁行语句分享(MySQL事务处理)

    下面这个语句是锁定一行数据,开始读取,一直到删除后都不会有第二个人也读到这条数据

    MySQL数据库:锁定与解锁.pptx

    MySQL提供了LOCK TABLES语句来锁定当前线程的表,语法格式如下: LOCK TABLES tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE} 说明: 表锁定支持以下类型的锁定。 READ:读锁定,确保用户可以读取表,...

    MySQL锁与事务脑图.pdf

    MySQL锁与事务知识脑图

    MySQL锁详解

    MySQL锁详解,锁还是非常重要的,无论解决工作的死锁还是面试都会有

    mysql锁详解

    资源名称:mysql锁详解资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

Global site tag (gtag.js) - Google Analytics