Mysql锁

1、死锁


    死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。

2、按照锁的粒度划分


全局锁


        全局锁,顾名思义,就是对整个数据库实例加锁。它是粒度最大的锁。通过执行 flush tables with read lock 指令加全局锁


释放锁


         执行 unlock tables 指令,加锁的会话断开,全局锁也会被自动释放


表级锁
表锁


         MySQL中锁定粒度最大的一种锁,表示对当前操作的整张表加锁,它实现简单,资源消耗较少,被大部分MySQL引擎支持。最常使用的MyISAM与InnoDB都支持表级锁定。特点:开销小,加锁快;不会出现死锁;锁定粒度大,发出锁冲突的概率最高,并发度最低。
                表共享读锁(共享锁)
                表独占写锁(排他锁)


元数据锁


        元数据锁:metadata lock,简称MDL,它是在MySQL 5.5版本引进的。元数据锁不用像表锁那样显式的加锁和释放锁,而是在访问表时被自动加上,以保证读写的正确性。


页级锁


        是MySQL中锁定粒度介于行级锁和表级锁中间的一种锁。表级锁速度快,但冲突多,行级冲突少,但速度慢。所以取了折衷的页级,一次锁定相邻的一组记录。特点:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般


行级锁


        MySQL中锁定粒度最细的一种锁,表示只针对当前操作的行进行加锁。行级锁能大大减少数据库操作的冲突。其加锁粒度最小,但加锁的开销也最大。特点:开销小,加锁快;不会出现死锁;锁定粒度大,发出锁冲突的概率最高,并发度最低。


共享锁


        又叫做读锁。当用户要进行数据的读取时,对数据加上共享锁。共享锁可以同时加上多个。


排他锁


         又叫做写锁,当用户要进行数据的写入时,对数据加上排他锁。排他锁只可以加一个,他和其他的排他锁,共享锁都相斥。

按照锁的模式


乐观锁


        假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。在修改数据的时候把事务锁起来,通过Version的方式来进行锁定。
实现方式:一般会使用版本号机制或CAS算法实现。


悲观锁


        假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。在查询完数据的时候就把事务锁起来,直到提交事务。实现方式:使用数据库中的锁机制

3、按照锁的属性


共享锁(S锁)


        又叫做读锁。当用户要进行数据的读取时,对数据加上共享锁。共享锁可以同时加上多个。


排他锁(X锁)


        又叫做写锁,当用户要进行数据的写入时,对数据加上排他锁。排他锁只可以加一个,他和其他的排他锁,共享锁都相斥。

4、按照锁的状态


意向共享锁(IS)


        表示事务打算在表中的各个行上设置共享锁。


意向排他锁(IX)


        表示事务打算对表中的各个行设置排他锁。

5、按照锁的算法


间隙锁


        锁定一个范围,但不包含记录;


记录锁


        是在索引记录上加锁;


临健锁(Next-Key)


        它是Record Lock + Gap Lock的组合,用来锁定一个范围,并且锁定记录本身锁,它是一种左开右闭的范围,可以用符号表示为:(a,b]。

6、按照加锁的方式


自动锁(Automatic Locks)


DML 锁


      锁用于控制并发事务中的数据操纵,保证数据的一致性和完整性。
保护并发情况下的数据完整性。
语句能够自动地获得所需的表级锁(TM)与行级(事务)锁(TX)。


DDL 锁


        锁用于保护数据库对象的结构,如表、索引等的结构定义。


排它 DDL 锁


        创建、修改、删除一个数据库对象的 DDL 语句获得操作对象的 排它锁。


共享 DDL 锁


       需在数据库对象之间建立相互依赖关系的 DDL 语句通常需共享获得 DDL锁。


Systemlocks


显示锁(Lock Tables)


        某些情况下,需要用户显示的锁定数据库操作要用到的数据,才能使数据库操作执行得更好,显示锁是用户为数据库对象设定的。施加写锁,写锁是排他的,不允许别的线程读和写,自己施加锁是不受影响。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

库库新

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值