当前位置: 首页 > news >正文

mysql数据库之表级锁

表级锁,每次操作锁住整张表。锁定粒度大,发生所冲突的概率最高,并发度最低。应用在myisam、innodb、bdb等存储引擎中。

一、表级锁分类。

1、表锁

2、元数据锁(meta data lock,MDL)

3、意向锁

二、表锁。

分类

1、表共享读锁(read lock)

 释放前 

 释放后

 

2、表独占写锁(write lock)

释放前

 释放后

 语法

1、加锁:lock tables 表名... read/write。

读锁,可以读,不可以写

写锁,本地客户端可以写可以读,其他客户端不能读不能写,释放后可以

 

2、释放锁:unlock tables 或者客户端断开连接。

三、元数据锁(meta data lock,MDL)。

MDL加锁过程是系统自动控制,无需显示使用,在访问一张表的时候会自动加上。MDL锁主要作用是维护表元数据的数据一致性,在表上有活动事务的时候,不可以对元数据进行写入操作。为了避免DML与DDL冲突,保证读写的正确性。

 在mysql5.5中引入了MDL,当对一张表进行增删改查的时候,家MDL读锁(共享锁),当对表结构进行变更操作的时候,家MDL写锁(排他锁)。

                        

 对应SQL  锁类型  说明 
lock tables xxx read/writeshared_read_only/shared_no_read_write
select/select... lock in share modeshared_read与shared_read/shared_write兼容,与exclusive互斥
insert、update、delete、select... for updateshared_write与shared_read/shared_write兼容,与exclusive互斥
alter table ...与其他的MDL互斥

1、共享锁,可以读可以写

 

2、修改表结构,未提交

 3、提交后可更新表结构

4、查看元数据锁

select object_type,object_schema,object_name,lock_duration from performance_schema.metadata_locks;

 查询

只有执行增删改查的时候,才会有对应的元数据锁,alter table改表结构的时候阻塞,提交事务即可执行。

四、意向锁。

 为了避免DML在执行时,家的行锁与表锁的冲突,在innodb中引入了意向锁,使得表锁不用检查每行数据是否加锁,使用意向锁来减少表锁的检查。

1、演示。

没有意向锁

 有意向锁

 2、分类。

意向共享锁(IS):由语句select ... lock in share mode添加。

意向排他锁(IX):由insert、update、delete、select ... for update添加。

3、兼容性。

意向共享锁(IS):与表锁共享锁(read)兼容,与表锁排他锁(write)互斥。

意向排他锁(IX):与表锁共享锁(read)和表锁排他锁(write)都互斥,意向锁之间不会互斥。

4、查看意向锁及行锁的加锁情况。

select object_schema,object_name,index_name,lock_type,lock_mode,lock_data from performance_schema.data_locks;

5、演示。

为这一行加行锁,为表加意向锁,查询语句后加上lock in share mode,是为这一行加共享锁,为整张表家意向共享锁。

 IS和读锁兼容,和写锁互斥,提交后释放

 执行update语句,自动为这一行加行锁,为表加上意向排他锁

 

互斥,提交事务后即可释放

 主要解决innodb引擎中加的行锁和表锁的冲突问题。

http://www.lryc.cn/news/35549.html

相关文章:

  • Python - Pandas - 数据分析(2)
  • 我的十年编程路 2019年篇
  • (蓝桥真题)剪格子(搜索+剪枝)
  • Kalman Filter in SLAM (3) ——Extended Kalman Filter (EKF, 扩展卡尔曼滤波)
  • 关于vertical-align的几问
  • 【拜占庭将军问题】这一计谋,可以让诸葛丞相兴复汉室
  • 【Linux】 -- make/Makefile
  • Forter 对支付服务商应对欺诈的四个建议和Gartner的两个关键结论
  • ANR系列(二)——ANR监听方案之IdleHandler
  • 数学小课堂:数学和自然科学的关系(数学方法,让自然科学变成科学体系。)
  • [蓝桥杯 2020 省 A1] 分配口罩
  • 第五章:C语言数据结构与算法之双向带头循环链表
  • 一文带你了解,前端模块化那些事儿
  • (六十五)大白话设计索引的时候,我们一般要考虑哪些因素呢?(中)
  • Spring事务管理
  • 数字化工厂装配线生产管理看板系统
  • vxe-grid 全局自定义filter过滤器,支持字典过滤
  • ECharts 环形图组件封装
  • c++ 怎么调用python 提供的函数接口
  • 【动态规划】背包问题(01背包,完全背包)
  • 记录 UE5 完全重新构建 UE C++项目
  • java版云HIS系统源码 微服务架构支持VUE
  • 苹果内购支付检验错误码
  • day27_css
  • 智慧赋能,聚力开源——第四届OpenI/O 启智开发者大会开源治理专场顺利举办!
  • Java工程师应该如何成长?
  • 【数据分析师求职面试指南】必备编程技能整理之Hive SQL必备用法
  • Maven - Linux 服务器 Maven 环境安装与测试
  • 5G模块可以注册到4G,不能注册到5G;SIM卡接到5G手机是可以注册到5G网络的?
  • 宝塔webhook自动化打包vue项目时,npm不生效问题