MySQL 面试题合集(锁篇)

🎈每日定期分享 | 面试求职经验 | 个人成长

开篇寄语
面试不必死记硬背,带着GPT去面试简直降维打击!

 

为您推荐一款颠覆性的GPT面试助手软件:“会议面试精灵”。这款工具能够实时分析语音内容、智能识别面试问题并生成精准答案,让您轻松应对八股文题目,从容处理各类复杂面试问题。
毕竟八股文在工作中很少使用,仅作为面试的筛选工具,不值得投入过多的精力。

 

如何获取“会议面试精灵”?
- 直接访问下载链接:https://www.interviewpass.fun
- 在搜索引擎中输入关键词:“会议面试精灵”(记得加上双引号)进行搜索。


目录

1、什么是锁?MySQL 中提供了几类锁?

2、什么是死锁?

3、常见的死锁案例有哪些?

4、如何处理死锁?

5、如何查看死锁?

6、如何避免死锁?

7、InnoDB 默认是如何对待死锁的?

8、如何开启死锁检测?

9、什么是全局锁?它的应用场景有哪些?

10、什么是共享锁?

11、什么是排它锁?

12、使用全局锁会导致什么问题?

13、如何处理逻辑备份时,整个数据库不能插入的情况?

14、如何设置数据库为全局只读锁?

15、除了 FTWRL 可以设置数据库只读外,还有什么别的方法?

16、FTWRL 和 set global readonly=true 有什么区别?

17、如何实现表锁?

18、悲观锁和乐观锁有什么区别?

19、乐观锁有什么优点和缺点?

20、InnoDB 存储引擎有几种锁算法?

21、InnoDB 如何实现行锁?

22、优化锁方面你有什么建议?​​​​​​​


1、什么是锁?MySQL 中提供了几类锁?

锁是实现数据库并发控制的重要手段,可以保证数据库在多人同时操作时能够正常运行。MySQL 提供了全局锁、行级锁、表级锁。其中 InnoDB 支持表级锁和行级锁,MyISAM 只支持表级锁。

2、什么是死锁?

是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的过程称为死锁。

死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的过程称为死锁。

3、常见的死锁案例有哪些?

将投资的钱拆封几份借给借款人,这时处理业务逻辑就要把若干个借款人一起锁住 select * from xxx where id in (xx,xx,xx) for update。

批量入库,存在则更新,不存在则插入。解决方法 insert into tab(xx,xx) on duplicate key update xx='xx'。

4、如何处理死锁?

对待死锁常见的两种策略:

1、通过 innodblockwait_timeout 来设置超时时间,一直等待直到超时;

2、发起死锁检测,发现死锁之后,主动回滚死锁中的某一个事务,让其它事务继续执行。

5、如何查看死锁?

使用命令 show engine innodb status 查看最近的一次死锁。

InnoDB Lock Monitor 打开锁监控,每 15s 输出一次日志。使用完毕后建议关闭,否则会影响数据库性能。

6、如何避免死锁?

1、为了在单个 InnoDB 表上执行多个并发写入操作时避免死锁,可以在事务开始时通过为预期要修改的每个元祖(行)使用 SELECT … FOR UPDATE 语句来获取必要的锁,即使这些行的更改语句是在之后才执行的。

2、在事务中,如果要更新记录,应该直接申请足够级别的锁,即排他锁,而不应先申请共享锁、更新时再申请排他锁,因为这时候当用户再申请排他锁时,其他事务可能又已经获得了相同记录的共享锁,从而造成锁冲突,甚至死锁

3、如果事务需要修改或锁定多个表,则应在每个事务中以相同的顺序使用加锁语句。在应用中,如果不同的程序会并发存取多个表,应尽量约定以相同的顺序来访问表,这样可以大大降低产生死锁的机会

4、通过 SELECT … LOCK IN SHARE MODE 获取行的读锁后,如果当前事务再需要对该记录进行更新操作,则很有可能造成死锁。

5、改变事务隔离级别。

7、InnoDB 默认是如何对待死锁的?

InnoDB 默认是使用设置死锁时间来让死锁超时的策略,默认 innodblockwait_timeout 设置的时长是 50s。

8、如何开启死锁检测?

设置 innodbdeadlockdetect 设置为 on 可以主动检测死锁,在 Innodb 中这个值默认就是 on 开启的状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值