数据库的锁

目录

一、锁的作用

二、锁分类

三、 乐观锁

(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
    评论
对于Spring事务和数据库的相关问题,我可以为你提供一些基本的信息。请注意,以下内容仅供参考。 Spring事务是一种用于管理数据库操作的机制,它确保了数据的一致性和完整性。在Spring中,你可以使用声明式事务或编程式事务来管理数据库操作。 声明式事务是通过在方法或类级别上添加事务注解来实现的。常用的事务注解包括`@Transactional`,它可以应用在方法或类上,并提供了一系列属性来配置事务的行为。 编程式事务是通过编写代码来手动管理事务的开始、提交和回滚过程。Spring提供了`TransactionTemplate`类来支持编程式事务管理。 关于数据库,它是一种用于控制并发访问数据库的机制。数据库可以保证数据的一致性和完整性,防止多个事务同时对同一数据进行修改而导致冲突。 常见的数据库包括行级、表级和页级。行级用于数据库中的单个数据行,表级用于定整个表,而页级则用于数据库中的页。 在Spring事务中,默认情况下,使用的是数据库的行级机制。如果需要使用其他级别的或更复杂的模式,你可以在SQL语句中明确指定。 需要注意的是,使用机制可能会导致性能下降和死等问题。因此,在设计和实现数据库操作时,需要合理地选择和使用机制。 希望以上信息对你有所帮助。如果你还有其他问题,请继续提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值