mysql锁的一些定义及理解

https://zhuanlan.zhihu.com/p/29150809 内容太长但讲的不错 建议看看 以下针对的是mysql innodb myisam 数据库存储引擎

抛个砖:
乐观锁:有a、b俩事务,当a事务在查询数据的时候,对b没影响,而且当a事务在更改数据提交的时候虽然会验证数据完整性,但这时b事务中数据发生改变也不会影响到a事务中对该数据的更改。(其实乐观锁并不是真的上锁,而是一种区别于悲观锁的一种思想)。无法解决脏读的问题
悲观锁:看字面意思悲观,则他就很悲观,即当某一事务操作数据的时候,他就会提前上锁。只有当它操作完该数据的时候释放锁,别的事务才可以进行操作该数据。
传统的关系型数据库里边就用到了很多这种锁机制比如行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁
死锁:即当多个进程之间发生资源争夺的时候,就可能发生死锁。
举个栗子:当俩人在比武的时候,A揪着B的耳朵,B揪着A的头发,A等B放开才放,B也等A放开才放。结果俩人都等着对方放。那不就陷入死锁状态了。可能不怎么恰当但容易理解吧
锁冲突:就是指锁与锁之间发生冲突。比如读锁和写锁。当一条数据被加上读锁(共享锁)的时候,就不能再加写锁(排他锁)了,否则造成冲突。(读锁和写锁之间是互斥的,写锁和写锁之间也是互斥的,读锁和读锁之间不是)
在这里插入图片描述

意向锁:为了允许行锁和表锁共存,实现多粒度锁机制,InnoDB 还有两种内部使用的意向锁(Intention Locks),这两种意向锁都是表锁
意向共享锁(IS):事务打算给数据行加行共享锁,事务在给一个数据行加共享锁前必须先取得该表的 IS 锁。
意向排他锁(IX):事务打算给数据行加行排他锁,事务在给一个数据行加排他锁前必须先取得该表的 IX 锁。
间隙锁:就是当我们用范围条件检索数据的时候,除了给查到的在范围内的数据加锁,而在范围内但不存在的记录就会有间隙(GAP)。此间隙也会上锁为间隙锁(Next-Key锁)
加入间隙锁目的就是为了防止出现幻读(幻读:一个事务(同一个read view)在前后两次查询同一范围的时候,后一次查询看到了前一次查询没有看到的行)
脏读:一个事务中读取到了另一个事务中未提交的数据
虚读:一个事务中前后俩次读取的数据不一致。
解决这种问题的话:1.设置隔离级别 2.加锁
表锁:Innodb、BDB、MYIsam
开销小,加锁快;不会出现死锁;锁定力度大,发生锁冲突概率高,并发度最低
页锁:BDB
开销和加锁速度介于表锁和行锁之间;会出现死锁;锁定粒度介于表锁和行锁之间,并发度一般
行锁:InnoDB
开销大,加锁慢;会出现死锁;锁定粒度小,发生锁冲突的概率低,并发度高

基于mysql实现的分布式的锁

[点击](https://blog.csdn.net/u013474436/article/details/104924782/)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值