
持续关注慧测,每天进步一点!
讲师:房老师
本期语音讲解
各位测试界小伙伴们
大家好,我是慧测的房老师,
欢迎大家参加慧测的2019年系列微课程活动。
本套课程主要分为两部分内容:
《每期一道名企面试题分析》
《每期5分钟测试开发小课堂》
目的是让大家利用好碎片化时间,每天积累一点技术。
在这门系列课程的每一期,我都会带领大家分析一道近期一线互联网公司测试开发笔、面试题。
让大家了解企业对技术的考察点,也帮助大家每期积累一个知识点。
本期要分析的是一道 数据库 相关的面试题。
有请题目登场:
简述你知道的mysql数据库死锁的产生原因
数据库和操作系统一样,是一个多用户使用的共享资源。
当多个用户并发地存取数据时,在数据库中会产生多个事务同时操作同一数据的情况。
若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库数据的一致性。
加锁是实现数据库并发控制的一个非常重要的技术。
在实际应用中经常会遇到的与锁相关的异常情况,当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就会出现死锁,影响应用的正常执行。
第一种:
用户A访问表A(锁住了表A),然后又访问表B;另一个用户 访问表B(锁住了表B),然后企图访问表A;这时用户A由于用户B已经锁住表B,它必须等待用户B释放表B才能继续,同样用户B要等用户A释放表A才能继续,这就死锁就产生了。
第二种:
用户A查询一条纪录,然后修改该条纪录;这时用户B修改该条记录,用户A的事务里锁的性质由查询的共享锁企图上升到独占锁,而用户B里的独占锁由于A 有共享锁存在所以必须等A释放掉共享锁,而A由于B的独占锁而无法上升的独占锁也就不可能释放共享锁,于是出现了死锁。
这种死锁比较隐蔽,但在稍大点的项目中经常发生。
第三种:
如果在事务中执行了一条不满足条件的update语句,则执行全表扫描,把行级锁上升为表级锁,多个这样的事务执行后,就很容易产生死锁和阻塞。类似的情 况还有当表中的数据量非常庞大而索引建的过少或不合适的时候,使得经常发生全表扫描,最终应用系统会越来越慢,最终发生阻塞或死锁。
以上就是今天面试题分享的全部内容,我们下期再见。
提前祝大家中秋节快乐

关注慧测,每天进步一点。
- END -
上期回顾:

慧测8月开班信息:
(别等啦,错过可能就是明年学习啦)
8月18日——自动化17期
8月18日——测试开发6期
8月18日——性能29期
8月18日——Python共享2期
欢迎加入我们:
慧测官网:www.huicewang.com
慧测Python群:324015481
公开课服务群:623636110
咨询QQ:2657535456
咨询微信号:huice666

慧测腾讯课堂 课程地址:


