MySQL面试深度解析:锁机制与事务隔离

需积分: 0 0 下载量 133 浏览量 更新于2024-06-23 收藏 26KB DOCX 举报
"MySQL面试题集,包含62道题目,涵盖了MySQL的锁机制、表格类型、MyISAM与InnoDB的区别、事务隔离级别以及数据类型等核心知识点。" 在MySQL数据库系统中,锁机制是确保数据并发访问安全的重要手段。主要分为三种类型: 1. **表级锁**:对整个表进行锁定,加锁速度快,但粒度大,可能导致较高的锁冲突,适合读多写少的场景。 2. **行级锁**:锁定单行数据,加锁速度慢,但并发度高,适合写操作频繁的情况,可能会出现死锁。 3. **页面锁**:介于表级锁和行级锁之间,适用于需要平衡加锁速度和并发度的场景。 MySQL支持多种表格类型,常见的包括: 1. **MyISAM**:不支持事务处理,但查询速度快,占用存储空间较少,适合读取操作为主的场景。使用表级锁,不存储表的总行数。 2. **Heap(内存表)**:数据存储在内存中,速度非常快,但重启后数据会丢失。 3. **Merge**:用于合并多个MyISAM表,提供更灵活的管理。 4. **INNODB**:支持事务处理和行级锁,适合需要事务安全和并发写入的环境,使用聚集索引,支持外键约束。 5. **JSAM**:JOURNALING(日志)存储引擎,提供事务支持,但使用较少。 MyISAM与InnoDB的主要区别在于: - MyISAM不支持事务,而InnoDB支持ACID兼容的事务,并提供了四种事务隔离级别。 - MyISAM使用表级锁,InnoDB支持行级锁,提高了并发性能。 - MyISAM不存储表的总行数,而InnoDB通常会存储。 - MyISAM的索引是非聚集的,InnoDB的主键索引是聚集的,辅索引存储的是主键值。 MySQL的事务隔离级别有四种,从低到高分别为: 1. **读未提交(READ UNCOMMITTED)**:最低级别,能看到其他事务未提交的数据,可能出现脏读。 2. **读已提交(READ COMMITTED)**:每个事务只能看到已经提交的数据,但可能存在不可重复读问题。 3. **可重复读(REPEATABLE READ)**:同一事务内的多次读取结果一致,但可能遇到幻读现象。 4. **串行化(SERIALIZABLE)**:最高级别,完全避免了脏读、不可重复读和幻读,但并发性能最低。 在数据类型方面,CHAR和VARCHAR的区别在于: - CHAR是固定长度的字符串类型,存储空间始终为声明的长度,检索时会去掉尾部空格。 - VARCHAR是可变长度的字符串,只存储实际字符长度,节省空间,适合存储长度变化的文本。 主键和候选键的概念: - 主键是唯一标识每条记录的键,每个表只能有一个主键,可以由一个或多个字段组成,不允许有NULL值。 - 候选键是能够唯一标识记录的键,可以作为主键,也可以不是。一个表可以有多个候选键,但只能选择其中一个为主键。