`

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锁表问题的方法。 1. **查看并杀死锁定进程** 使用`SHOW PROCESSLIST`命令可以查看当前所有正在执行的SQL语句及其状态,包括是否被锁定。如果发现有锁定的进程,可以使用`KILL`命令来终止...

    mysql锁表解表

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

    mysql锁表和解锁语句分享

    MySQL锁表和解锁语句分享 MySQL 中有三种锁的级别:页级、表级、行级。每种锁级别都有其典型的引擎,页级的典型代表引擎为 BDB,表级的典型代表引擎为 MyISAM、MEMORY 以及很久以前的 ISAM,行级的典型代表引擎为 ...

    mysql锁表1

    在MySQL数据库管理系统中,"锁表"是一种重要的并发控制机制,用于确保在多用户环境中数据的一致性和完整性。锁能够防止多个用户同时修改同一数据,从而避免数据冲突和不一致。本篇文章将深入探讨MySQL中的锁表机制...

    MYSQL 解锁与锁表介绍

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

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

    锁表操作如`LOCK TABLES tbl_name READ/WRITE;`可以在备份或维护时使用,它会阻止其他用户对指定表进行读写操作,直到执行`UNLOCK TABLES;`为止。 总的来说,理解和正确使用MySQL的锁机制对于优化并发性能和避免...

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

    Yii 框架结合 MySQL 数据库提供了一种方法来处理并发情况下的数据重复问题,即通过使用锁表机制。本文将深入探讨如何利用 `lock tables` 和 `unlock tables` SQL 命令在 Yii 框架中实现这一目标。 `lock tables` 是...

    MYSQL锁机制全揭秘

    MySQL锁机制是数据库管理系统中用于协调多个事务或者进程,以保证数据的完整性和一致性的一套规则。在数据库操作中,保证数据并发访问时的一致性、有效性是至关重要的,锁机制正是为此而生。 MySQL支持不同存储引擎...

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

    系统介绍mysql锁机制

    MySQL不停机不锁表主从同步与读写分离配置

    ### MySQL不停机不锁表主从同步与读写分离配置详解 #### 一、XtraBackup 安装 为了实现MySQL不停机不锁表的主从同步与读写分离配置,首先需要安装XtraBackup工具。XtraBackup是一款非常优秀的开源备份工具,尤其...

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

    MySQL中的锁机制是数据库事务处理中的重要组成部分,用于确保数据的一致性和完整性。在标题和描述中提到的“mysql 锁表锁行语句分享”是关于如何在MySQL中使用事务来锁定特定行数据,确保在操作期间不会被其他并发...

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

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

    MYSQL锁机制

    ### MySQL锁机制详解 #### 一、MySQL锁机制概述 MySQL中的锁机制是数据库管理系统用于控制并发事务对数据资源访问的关键技术之一。合理地管理和利用锁机制能够有效地防止数据不一致性和提高系统的并发处理能力。...

    mysql 数据表中查找重复记录

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

    MySQL锁详解

    首先,MySQL的锁机制主要有表级锁、行级锁以及页面锁三种。不同的存储引擎对锁的支持也不同。MyISAM和MEMORY存储引擎使用表级锁,BDB存储引擎支持页面锁,同时也可以使用表级锁,而InnoDB存储引擎则同时支持行级锁和...

    MySQL的锁机制解析

    MySQL中的锁大致可以分为两大类:行级锁(Row-Level Locks)和表级锁(Table-Level Locks)。行级锁在粒度上更细,允许更多的并发操作,但开销也相对较大。表级锁则相反,它锁定整个表,提供较低的并发性,但开销较...

    MySQL8.0锁机制和事务

    MySQL 8.0 锁机制和事务 MySQL 8.0 中的锁机制和事务是数据库系统中非常重要的概念。锁机制是指数据库系统中对数据访问的控制机制,而事务是指数据库系统中的一组操作单元。了解锁机制和事务是非常关键的,因为它们...

Global site tag (gtag.js) - Google Analytics