MySQL面试深度解析:锁机制与存储引擎对比

需积分: 50 56 下载量 107 浏览量 更新于2024-09-07 5 收藏 424KB PDF 举报
"最全MySQL面试50题和答案" 在MySQL数据库系统中,锁机制是确保数据安全和并发控制的重要手段。根据锁的粒度,可以分为以下三种类型: 1. **表级锁**:这是最简单的锁类型,对整个表进行锁定。表级锁开销小,加锁速度快,但缺点是锁定粒度大,可能导致较高的锁冲突概率,从而降低并发性能。 2. **行级锁**:行级锁提供了更细粒度的锁定,只锁定操作涉及的行。这减少了锁冲突,提高了并发度,但相对表级锁,其加锁和释放锁的操作更为复杂,可能会出现死锁。 3. **页面锁**:介于表级锁和行级锁之间,锁定的是数据页而不是单行或整个表,平衡了加锁速度和并发性能。 MySQL中的表格类型包括: 1. **MyISAM**:不支持事务处理,但支持表级锁,适合读取密集型应用。每个MyISAM表由三个文件组成:索引文件、表结构文件和数据文件,且不存储表的总行数。 2. **InnoDB**:支持事务和四种事务隔离级别,提供行级锁和外键约束,适用于写入密集型应用。InnoDB使用聚集索引,主键索引的叶子节点包含数据行,而辅助索引存储主键值以找到对应数据。 MySQL的四种事务隔离级别分别是: 1. **读未提交(Read Uncommitted)**:最低级别,可能读到未提交的数据,存在脏读问题。 2. **读已提交(Read Committed)**:每次读取的数据都是事务提交后的,避免了脏读,但可能发生不可重复读。 3. **可重复读(Repeatable Read)**:InnoDB默认级别,同一事务内多次读取相同数据始终一致,防止了不可重复读,但可能有幻读现象。 4. **串行化(Serializable)**:最高级别,所有事务按顺序执行,完全避免了脏读、不可重复读和幻读,但并发性能最低。 在数据类型方面,`CHAR`和`VARCHAR`有显著区别: 1. **CHAR**:固定长度,存储时会用空格填充到指定长度,检索时会去掉尾随空格。适用于长度固定的数据,如邮政编码。 2. **VARCHAR**:变长类型,只存储实际使用的字符数,节省空间。适合存储长度变化的数据,如用户评论。 至于主键和候选键,它们都是用于唯一标识表中记录的键,但有以下不同: 1. **主键**:一个表只能有一个主键,且主键的值必须唯一且非空,可以由一个或多个列组成。它是表的逻辑划分基础,用于其他表的外键引用。 2. **候选键**:如果一个列或一组列满足唯一性和非空性,那么它就是一个候选键。一个表可以有多个候选键,但只能选择其中一个作为主键。 了解这些知识点对于理解MySQL的运作原理和优化数据库性能至关重要,特别是在面试或实际项目开发中。