C# .NET CORE 面试题【Mysql篇】

心之所向,勇往直前!
简单归纳Mysql相关面试题

正文

   MySql的索引有哪些?

   a. 聚簇索引:主键,索引即数据

   b. 非聚簇索引:索引和数据分开储存,检索到索引后需要回表查询数据

 

   MySql的MylSAM和Innodb有什么区别?

   a. MylSAM不支持事务,Innodb支持事务

   b. MylSAM支持表锁,Innodb支持行锁

   c. MylSAM将数据文件和索引文件分开存储(B树),InnoDB将索引和数据存储在一起(B+树)

   d. MylSAM通常比InnoDB快,尤其是在读取密集型的应用场景下,InnoDB在写入密集型应用中可能表现更好,因为它有更好的并发控制

   e. MyISAM不支持外键,InnoDB支持外键

   

   MySql有一个联合索引a,b,c,where条件为a,c能否走上该索引?

   a. 可以走上索引(会先检索到a)

   b. 基于最左匹配原则(最左优先,以最左边的为起点任何连续的索引都能匹配上,同时遇到范围查询(>、<、between、like)就会停止匹配,排列组合中的顺序会被优化器优化)

   c. 如果a、c列查询比较频繁,单独建立索引会更好

 

   MySql的Innodb通过什么保证ACID

   a. 原子性(Atomicity):通过undolog来保证事务的原子性,事务中的操作全部成功或者全部失败。undolog记录了事务中每一步操作的反向操作,如果事务需要回滚,InnoDB会通过这些日志将数据恢复到事务开始前的状态

   b. 一致性(Consistency)InnoDB通过原子性、持久性、隔离性最终实现数据一致

   c. 隔离性(Isolation):InnoDB通过MVCC和锁机制保证隔离性

   d. 持久性(Durability):通过redolog来保证事务的持久性

 

   可以详细说说undolog吗?

   a. undolog记录了执行语句的反向语句,用于事务回滚

   b. undolog是逻辑日志,InnoDB存储引擎回滚时,对于每个INSERT,会完成一个DELETE;对于每个DELETE,会执行一个INSERT;对于每个UPDATE,会执行一个相反的UPDATE,将修改前的行放回去

   c. undolog也用于MVCC,当用户读取一行记录时,若该记录已经被其他事务占用,当前事务可以通过undo读取之前的行版本信息,以此实现非锁定读取

 

   可以详细说说redolog吗?

   a. redolog用于保证事务的持久性(Innodb是通以页为单位来写磁盘IO的,同一个事务又可能涉及多个不连续页,每次都直接刷盘会损耗极大的性能,而且一旦发生宕机则会丢失数据)

   b. redolog记录存储表空间ID、页号、偏移量和需要更新的值

   c.事务执行时会先把命令记录到redolog的buffer pool中,再以一定频率将数据刷到redo log file中

 

  可以详细说说binlog吗?

   a. binlog是二进制日志文件,记录了所有更新数据库的语句

   b. binlog可以用于恢复数据、数据备份、集群、读写分离

   c. binlog在事务提交时写入

 

   Innodb如何解决redolog和binlog两种日志的逻辑一致问题?

   a. Innodb采用两段提交的方式解决这种问题(两阶段提交:将redo log的写入操作拆成了两个步骤preparecommit进行,在事务执行期间,写入的redo log标记为prepare阶段,待事务提交且bin log写入成功时,才将redo log标记为commit阶段。)

   

   Mysql的四种事务隔离级别是什么?

   a. 读未提交(Read Uncommitted):在这个级别下,一个事务可以读取另一个事务中还未提交的数据

   b. 读已提交(Read Committed):

   c. 不可重复读(Repeatable Read):

   d. 串行读(Serializable):

    

隔离级别脏读可能性不可重复读可能性幻读可能性加锁读
READ UNCOMMITTED
READ COMMITTED
REPEATABLE READ
SERIALIZABLE

 

 

 

 

结语

  本篇到此结束,如果有任何疑问或者指正,请发表在评论区。

posted @ 2024-08-24 21:08  技术只能混口饭吃  阅读(49)  评论(0)    收藏  举报