显式锁Explicit Table Lock与隐式锁Explicit Table Lock

显式锁Explicit Table Lock

显式表锁(Explicit Table Locks)即通过命令lock tables对表进行锁定(共享或排他锁)、FLUSH TABLES WITH READ LOCK(共享锁),直到用显式的命令UNLOCK TABLES语句才能解锁。当FLUSH TABLES WITH READ LOCK不接表名时会触发metadata lock。

示意案例

-- 锁定emp表只能读、写
LOCK TABLES emp READ,
dept WRITE;-- 在该会话里执行更新操作
UPDATE ShenLiang2025.emp
SET sal=1800.00
WHERE empno=7369
> 1099 - Table 'emp' was locked with a READ lock and can't be updated
> 时间: 0s-- 在该会话里对dept执行更新操作
UPDATE dept SET loc='NEW YORK3' WHERE deptno=10
> Affected rows: 1
> 时间: 0.01s-- 在该会话里对dept执行查询操作时会进入持续等待。--通过执行unlock tables释放表的锁定。
UNLOCK TABLES-- 没有被锁定的表执行查询时报错。
SELECT * FROM salgrade
> 1100 - Table 'salgrade' was not locked with LOCK TABLES
> 时间: 0s

隐式锁Implicit Table Lock

隐式锁(Implicit Table Locks), InnoDB在表级用到意向锁。常见的语句如:

意向共享锁:SELECT ... FOR SHARE 跟SELECT ... LOCK IN SHARE MODE效果一样。

意向排他锁:SELECT ... FOR UPDATE或者其它的DML语句(这里不含SELECT),如果涉及到外键里引用的表也会被锁定。

关于两个意向锁的兼容性可见下表

Exclusive (X)

Intention Exclusive (IX)

Shared (S)

Intention Shared (IS)

Exclusive (X)

Intention Exclusive (IX)

Shared (S)

Intention Shared (IS)

1 这里Shared (S)是共享锁,Exclusive (X)是排他锁,Intention Exclusive (IX)是意向排他锁,Intention Shared (IS)是意向共享锁。

示意案例

--Step1 执行未完成事务(更新数据)START TRANSACTION> OK> 时间: 0s#SELECT * FROM emp WHERE empno=7499UPDATE emp SET sal=11600.00 WHERE empno=7499> Affected rows: 1> 时间: 0s--Step2 查看当前锁的详细信息mysql> SELECT * FROM performance_schema.data_locks WHERE LOCK_TYPE = 'TABLE' \G*************************** 1. row ***************************ENGINE: INNODBENGINE_LOCK_ID: 139740117241048:1111:139740049386240ENGINE_TRANSACTION_ID: 38166THREAD_ID: 48EVENT_ID: 56OBJECT_SCHEMA: ShenLiang2025OBJECT_NAME: empPARTITION_NAME: NULLSUBPARTITION_NAME: NULLINDEX_NAME: NULLOBJECT_INSTANCE_BEGIN: 139740049386240LOCK_TYPE: TABLELOCK_MODE: IXLOCK_STATUS: GRANTEDLOCK_DATA: NULL1 row in set (0.02 sec)通过结果可以看出当前是IX锁。-- Step3 最后通过rollback回滚该事务。ROLLBACK;

Mysql 死锁过程及案例详解之显式与隐式锁Explicit Table Lock Implicit Table Lock相关推荐

  1. Mysql 死锁过程及案例详解之插入意向锁与自增锁备份锁日志锁Insert Intention Lock Auto-increment Lock Backup Lock Log Lock

    Mysql 插入意向锁与自增锁备份锁日志锁 插入意向锁Insert Intention Lock 插入意向锁Insert intention locks是记录级别的,它通过"INSERT&q ...

  2. Mysql 死锁过程及案例详解之用户自定义锁

    Mysql 用户自定义锁介绍 锁简介 当多个请求连接到数据库时,能保证同类查询执行时不相互冲突的机制即是锁.比如马路上的信号灯就是一个解决冲突的例子,在一定的时间内锁定了能通行的方向或者路线.MySQ ...

  3. Mysql 死锁过程及案例详解之元数据锁MetaData Lock

    Mysql数据锁MetaData Lock 元数据锁MetaData Lock 元数据锁MetaData Locks的主要作用是在执行查询或者发起事务时元数据结构受到保护,即不被修改. MetaDat ...

  4. Mysql 死锁过程及案例详解之清空缓存锁Flush Lock

    Mysql 清空缓存锁Flush Lock 清空缓存锁Flush Locks flush table的功能是关闭所有打开的表,强制关闭所有正在使用的表,并刷新准备好的语句缓存. 这种操作需要用户拥有  ...

  5. Mysql 死锁过程及案例详解之记录锁与间隔锁Record Lock Gap Lock

    记录锁Record Lock与间隔锁GAP Lock 记录锁Record Lock 记录锁Record Locks又称为行锁,它同时包含索引和间隔锁.记录锁可以是共享锁也可能是排他锁.可以通过perf ...

  6. wow mysql dbc_DBC中悲观锁介绍附案例详解

    DBC中悲观锁介绍附案例详解 了解下DBC中悲观锁: 代码如下: BDUtils 工具类: package JDBC; import java.sql.*; public class BDUtils ...

  7. mysql 自动截断_MySql中关于超长自动截断的案例详解

    这篇文章主要介绍了MySql超长自动截断实例详解的相关资料,这里通过实例来说明如何实现自动截断的功能,需要的朋友可以参考下 MySql超长自动截断实例详解 小伙伴问到一个问题,为啥在项目中调用插入或者 ...

  8. 数据湖架构Hudi(五)Hudi集成Flink案例详解

    五.Hudi集成Flink案例详解 5.1 hudi集成flink flink的下载地址: https://archive.apache.org/dist/flink/ Hudi Supported ...

  9. 代码检查规则:Python语言案例详解

    在之前的文章中代码检查规则:Java语言案例详解学习了Java的检查规则.我们今天将学习<代码检查规则:Python语言案例详解>,内容主要分为两个部分:Python的代码检查规则和Pyt ...

最新文章

  1. 神器来啦!一键可视化,终于能看懂神经网络到底在干啥了
  2. 富士康c语言试卷答案,2015富士康笔试题目及答案
  3. 十天精通CSS3(11)
  4. java js 执行效率_JavaScript提高加载和执行效率的方法
  5. vsftp+tftp+dhcp+pxe+kickstart自动化安装操作系统
  6. 第三篇:稳定性之借风险之力驱动架构演进
  7. 由pthread_create引起的段错误
  8. python动态页面元素爬取_python动态爬取网页
  9. 有关两个jar包中包含完全相同的包名和类名的加载问题
  10. 火狐浏览器缓存区的利用,如何提取火狐缓存的动画
  11. [Python设计模式] 第14章 老板来了——观察者模式
  12. 解决wordpress用户注册时,点击邮件中的重置密码链接提示“您的密码重设链接无效”
  13. IP库GeoLite2-City.mmdb的使用
  14. 重庆人文科技学院计算机学院院长,我校计算机工程学院成立大会圆满闭幕
  15. NetLink机制使用
  16. 3D影视建模:你这个糟老头子坏的很,来看看《糟老头子》制作流程分享
  17. 基于JSP的物流信息管理系统(MySQL版)
  18. 大数据正在改变我们的生活
  19. 剑指offer:顺时针打印矩阵(Python)
  20. Java常用类(六):FilenameUtils类

热门文章

  1. VTK:多行文本用法实战
  2. VTK:参数化超椭球用法实战
  3. OpenCASCADE绘制测试线束:布尔运算命令之设置选项的操作
  4. wxWidgets:wxPlatformInfo类用法
  5. boost::ptr_container::indirect_fun相关的测试程序
  6. boost::mp11::integer_sequence相关用法的测试程序
  7. boost::intrusive::bucket_traits用法的测试程序
  8. boost::hana::test::TestGroup用法的测试程序
  9. boost::hana::greater用法的测试程序
  10. boost::hana::curry用法的测试程序