140平米装修全包费用,江苏网站建设网站排名优化,建筑工程机械人才网,力软框架做网站目录#xff1a; 第一题. MySQL中InnoDB引擎的行锁是怎么实现的#xff1f;第二题. InnoDB存储引擎的锁的算法有三种第三题. 什么是死锁#xff1f;怎么解决#xff1f;第四题. 数据库的乐观锁和悲观锁是什么#xff1f;怎么实现的#xff1f;第五题. 为什么要使用视图 第一题. MySQL中InnoDB引擎的行锁是怎么实现的第二题. InnoDB存储引擎的锁的算法有三种第三题. 什么是死锁怎么解决第四题. 数据库的乐观锁和悲观锁是什么怎么实现的第五题. 为什么要使用视图什么是视图 第一题. MySQL中InnoDB引擎的行锁是怎么实现的
答InnoDB是基于索引来完成行锁 例: select * from tab_with_index where id 1 for update; for update 可以根据条件来完成行锁锁定并且 id 是有索引键的列如果 id不是索引键那么InnoDB将完成表锁并发将无从谈起
第二题. InnoDB存储引擎的锁的算法有三种
Record lock单个行记录上的锁Gap lock间隙锁锁定一个范围不包括记录本身Next-key lockrecordgap 锁定一个范围包含记录本身
相关知识点
innodb对于行的查询使用next-key lockNext-locking keying为了解决Phantom Problem幻读问题当查询的索引含有唯一属性时将next-key lock降级为record keyGap锁设计的目的是为了阻止多个事务将记录插入到同一范围内而这会导致幻读问题的产生有两种方式显式关闭gap锁除了外键约束和唯一性检查外其余情况仅使用record lock A. 将事务隔离级别设置为RC B. 将参数innodb_locks_unsafe_for_binlog设置为1
第三题. 什么是死锁怎么解决
死锁是指两个或多个事务在同一资源上相互占用并请求锁定对方的资源从而导致恶性循环的现象。
常见的解决死锁的方法
如果不同程序会并发存取多个表尽量约定以相同的顺序访问表可以大大降低死锁机会。在同一个事务中尽可能做到一次锁定所需要的所有资源减少死锁产生概率对于非常容易产生死锁的业务部分可以尝试使用升级锁定颗粒度通过表级锁定来减少死锁产生的概率
如果业务处理不好可以用分布式事务锁或者使用乐观锁
第四题. 数据库的乐观锁和悲观锁是什么怎么实现的
数据库管理系统DBMS中的并发控制的任务是确保在多个事务同时存取数据库中同一数据时不破坏事务的隔离性和统一性以及数据库的统一性。乐观并发控制乐观锁和悲观并发控制悲观锁是并发控制主要采用的技术手段。 悲观锁假定会发生并发冲突屏蔽一切可能违反数据完整性的操作。在查询完数据的时候就把事务锁起来直到提交事务。实现方式使用数据库中的锁机制 乐观锁假设不会发生并发冲突只在提交操作时检查是否违反数据完整性。在修改数据的时候把事务锁起来通过version的方式来进行锁定。实现方式乐一般会使用版本号机制或CAS算法实现。
两种锁的使用场景 从上面对两种锁的介绍我们知道两种锁各有优缺点不可认为一种好于另一种像乐观锁适用于写比较少的情况下多读场景即冲突真的很少发生的时候这样可以省去了锁的开销加大了系统的整个吞吐量。 但如果是多写的情况一般会经常产生冲突这就会导致上层应用会不断的进行retry这样反倒是降低了性能所以一般多写的场景下用悲观锁就比较合适。
第五题. 为什么要使用视图什么是视图
为了提高复杂SQL语句的复用性和表操作的安全性MySQL数据库管理系统提供了视图特性。所谓视图本质上是一种虚拟表在物理上是不存在的其内容与真实的表相似包含一系列带有名称的列和行数据。但是视图并不在数据库中以储存的数据值形式存在。行和列数据来自定义视图的查询所引用基本表并且在具体引用视图时动态生成。
视图使开发者只关心感兴趣的某些特定数据和所负责的特定任务只能看到视图中所定义的数据而不是视图所引用表中的数据从而提高了数据库中数据的安全性
如果我的内容对你有帮助请点赞评论收藏。创作不易大家的支持就是我坚持下去的动力