面试-数据库-锁模块

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值