浅谈mysql中的那些琐

27 篇文章 0 订阅
21 篇文章 0 订阅

读锁和写锁 

一种对行为的抽象描述,主流数据库引擎都是select为读锁,update/delete/insert为写锁

表锁

顾名思义,锁住整张表的数据

 行锁

锁住数据所在行。

表锁和行锁对比:
性能:表锁<行锁
锁的速度:表锁>行锁(表数据越大,开销越大,需找到表中所在行的数据,进行锁定)

 共享锁

查询数据时,会对其加锁,期间可以有其它的读操作进入。(即共享锁之间可以共存)

排它锁

写入操作时,对数据进行的加锁处理,期间不允许其它请求访问锁定的数据

 意向锁

意向是指一种行为的表现,方便表锁前进行判断。如,要进行表锁,正常来说需要判断表中所有记录都没有锁,
才行进行表锁,这样非常耗时。而意向锁,则解决这一问题,再进行排它锁或共享锁时,会先给表上加一个锁,
也可以理解为一个操作的标记,当需要进行表锁时,直接判断表上是否有对应的意向锁,就可进行相应的操作

 假设数据表记录为如下

id: 1   5  8  11 4条记录

记录锁

按照键位查询。适用于匹配单个字段数值
即:
1、5、8、11
锁定当前记录,如where id =1 锁住id为1 的记录

间隙锁

按照键位将数据分为左开右开的区间范围。适用于匹配单个字段数值
即:
(-无穷,1)、1、(1,5)、5、(5,8)、8、(8,11)、11、(11,+无穷)

锁住记录之间的访问缝隙,如where id = 3,会锁住(1,5)间的数据模块

临键锁

按照键位将数据分为左开右闭的区间范围。
即:
(-无穷,1]、(1,5]、(5,8]、(8,11]、(11,+无穷)

锁住下一个最近键的范围,用于范围查询,如:where id > 6 and id < 10其锁住的范围是(5,11]

 锁到底锁住的是什么?

本文只做记录,不做验证,感兴趣的小伙伴可自行研究:
锁,锁住的是索引,因为我们查找数据都是按照索引去进行数据的检索。否则就是全表扫描。

 表中无索引会产生锁吗?

这是一个伪命题。
首先,表中无索引这句话有不同的观点。
依据数据库的原理,表所有字段不建立任何索引的情况下,数据库会依照记录的行号进行类似索引的操作。

其次,当产生锁的时候,没有索引,回去将记录的行号当做索引进行锁定

欢迎大家和帝都的雁积极互动,头脑交流会比个人埋头苦学更有效!共勉!

公众号:帝都的雁

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值