数据库的锁

目录

一、锁的作用

二、锁分类

三、 乐观锁

(1) 定义

(2) 两种实现方式

1. 版本号机制

2.CAS算法(一种无锁算法)

四、悲观锁

(1)定义

(2)按锁粒度分类

0.分三类

1.行锁

1)行锁分类

2)记录锁

3)间隙锁

4)临键锁

2.页锁

3.表锁

0)表锁分类

1)意向锁

2)自增锁

4.三类锁特点

5.各数据库三类锁应用情况

(3) 三种实现方式

1.共享锁 Shared Locks

2.排他锁 Exclusive Locks

3.更新锁 updLock

(4)加上悲观锁后常见问题

1.阻塞

2.死锁

3.锁冲突

4.死锁和锁冲突的区别

五、两种锁应用场景


一、锁的作用

加锁能实现隔离级别,解决并发问题

二、锁分类

分为:乐观锁、悲观锁

三、 乐观锁

(1) 定义

很乐观。每次去拿数据的时候都认为别人不会修改,所以不会上锁。等到数据进行提交更新的时候,才会正式对数据的冲突与否进行检测

(2) 两种实现方式

1. 版本号机制

表增加一个数字类型的 “version” 字段,每更新一次,对此version值加1,更新时如果当前version与第一次取出来的version值相等,则予以更新,否则认为是过期数据

2.CAS算法(一种无锁算法)

四、悲观锁

(1)定义

很悲观。每次去拿数据的时候都认为别人会修改,所以每次拿数据的时候都会上锁(依靠数据库的锁机制)

(2)按锁粒度分类

0.分三类

锁粒度即锁级别,级别越高粒度越大。分为行锁、页锁、表锁(粒度依次变大)

1.行锁

1)行锁分类

行锁的定义:访问数据库的时候,锁定整个行数据(实际锁的是该行相关数据列的索引),防止并发错误。

行锁又分为:记录锁 Record Locks、间隙锁 Gap Locks、临键锁 Next-Key Locks

2)记录锁

查询sql用“=”精准匹配,锁住一条记录

SELECT * FROM 表名 WHERE age=60 FOR UPDATE;    //此时id=60这条记录被锁住(上了排他锁)。注意,如果age有索引就锁的是age=60这列age的索引,没有就锁住整张表,变成表锁了

3)间隙锁

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值