当前位置:   article > 正文

面试-数据库-锁模块

面试-数据库-锁模块

1.锁模块-MYISAM和InooDB关于锁方面的区别
MYISAM默认是表级别的锁,不支持行级锁
InooDB默认是行级锁,也支持表级锁。
InooDB:(支持事务。通过暂时不提交的方式模拟并发访问。Mysql默认自动提交)
使用的是二段锁(加锁跟解锁是分开的,commit时解锁。
默认是行级锁。
除了用id(主键)其他的键都会被上共享锁或排他锁。
在不走索引时,用的是表级锁。走索引时,用的是行级锁跟GAP锁(涉及到普通非唯一索引)。)
还支持表级的意向锁(分为共享读锁IS,排他写锁IX)
Update person_info_large set title = “test3” where id =3;(成功,因为select并未对该行上锁。非阻塞select)
显示上共享锁:
Select * from person_info_large where id =3 lock in share mode;

MYISAM适用场景:
频繁执行全表Count的语句;
对数据增删改频率不高,查询非常频繁;
没有事务;

InooDB适用场景:
数据的增删改查频率都非常高;
可靠性要求比较高,要求事务

(2)行级锁一定会比表级锁好吗?
锁的力度越细,代价越高。InnoDB支持事务的同时,也相比MYISSAM带来了更大的开销。同时,我们从索引部分了解到,InnoDB必须有且仅有一个密集索引。数据文件和索引绑在一起。必须要有主键,通过主键索引,效率很高。但是辅助索引,需要查两次。MYISSAM非聚集索引,数据文件分离,索引保存的是数据文件的指针。主键索引跟辅助索引是独立的。因此MYISSAM在纯检索系统中,也就是增删改很少的系统中,其性能较好。

(3)悲观锁与乐观锁
悲观锁:对系统,对外界外部系统的处理持保守态度。因此在数据处理过程中,将数据处于锁定状态。实现:数据库提供的锁机制。

乐观锁:数据进行提交,更新时才会对数据进行检测。如果发现冲突,返回用户错误信息。让用户决定如何去做。实现方式:记录数据版本,不使用数据库提供的锁机制。(使用版本号(修改数据version)或时间戳)

2.数据库事务的四大特性
ACID:
原子性:事务所有操作要么全部执行,要么全部失败回滚。
一致性:数据库数据一直保持一致的状态(满足完整性约束)
隔离性:事务并发时,一个事务的执行不影响其他事务的执行。
持久性:数据永久保存。(涉及DBMS的冗余与恢复性能)

3.锁模块之事务并发访问产生的问题以及事务隔离机制
产生的问题:
更新丢失:

脏读:一个事务读到另一个事务提交的未更新的数据。

不可重复读: 事务a多次读取同一数据,事务b在事务a读取过程中,对数据做了更新,并提交,导致事务A多次读取同一事务时,结果不一致。

幻读:事务a读取与搜索条件相关的若干行,事务b以插入或删除的方式修改事务a的结果集。导致事务a看起来出现幻觉一样。(mysql机制自动避免)

隔离机制:
在这里插入图片描述
在这里插入图片描述
隔离级别越高,安全性越高,串行化执行越严重。这样就降低了数据库的并发度。性能也会降低。
Oracle默认READ-COMMITTED
MYSQL默认REPEATABLE-READ

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/758041
推荐阅读
相关标签
  

闽ICP备14008679号