interview
backend-classic
MySQL 支持哪些存储引擎默认使用哪个MyISAM 和 InnoDB 引擎有什么区别如何选择

后端经典面试题合集, MySQL 支持哪些存储引擎?默认使用哪个?MyISAM 和 InnoDB 引擎有什么区别,如何选择?

后端经典面试题合集, MySQL 支持哪些存储引擎?默认使用哪个?MyISAM 和 InnoDB 引擎有什么区别,如何选择?

QA

Step 1

Q:: MySQL 支持哪些存储引擎?默认使用哪个?

A:: MySQL 支持多种存储引擎,其中最常用的有 InnoDB、MyISAM、Memory、CSV、Archive、Federated、Merge、Blackhole 等。默认情况下,MySQL 从版本 5.5 开始使用 InnoDB 作为默认存储引擎。在此之前,MyISAM 是默认的存储引擎。

Step 2

Q:: MyISAM 和 InnoDB 引擎有什么区别,如何选择?

A:: MyISAM 和 InnoDB 是 MySQL 中最常用的两种存储引擎。MyISAM 引擎不支持事务、外键和行级锁,而 InnoDB 引擎支持事务、外键以及行级锁。InnoDB 通过 MVCC(多版本并发控制)支持更高的并发性,并在系统崩溃时具有更好的数据恢复能力。选择存储引擎时,如果需要事务支持和数据完整性保证,应该选择 InnoDB;如果在读操作远多于写操作,且不需要事务支持,可以选择 MyISAM 来提高查询速度。

用途

这个内容在面试中之所以会被问到,是因为存储引擎的选择直接影响到系统的性能、数据完整性、以及开发复杂度。在实际生产环境中,根据具体的业务需求(如对数据一致性、性能、并发量的要求),选择合适的存储引擎非常重要。例如,处理金融交易系统时,通常需要使用 InnoDB 以确保数据的一致性和事务完整性;而对于一些日志或分析系统,MyISAM 可能会因为其快速读取特性而被优先考虑。\n

相关问题

🦆
InnoDB 如何保证事务的 ACID 特性?

InnoDB 通过使用事务日志(redo log)和回滚日志(undo log)来保证事务的原子性、一致性、隔离性和持久性(ACID)。在事务提交之前,所有的更改都会记录在 redo log 中,即使系统崩溃,也可以通过日志恢复数据。此外,InnoDB 还使用 MVCC 来实现一致性读取,确保读操作不会被写操作阻塞。

🦆
MySQL 中的行级锁和表级锁的区别是什么?

行级锁(row-level locking)是指在操作时锁定某一行数据,适用于并发写操作较多的场景,这种锁定方式可以减少锁冲突,提高并发性。而表级锁(table-level locking)则是锁定整个表,适用于批量处理数据的场景,锁定开销较小,但并发性较差。MyISAM 使用表级锁,InnoDB 使用行级锁。

🦆
什么是 MVCC?InnoDB 是如何实现的?

MVCC,即多版本并发控制(Multi-Version Concurrency Control),是一种允许多个事务同时访问数据库而不相互阻塞的技术。InnoDB 通过保存每一行数据的多个版本,并在读取时选择合适的版本来实现 MVCC。每个版本通过隐藏列存储(如事务ID和回滚指针)来实现不同事务的隔离级别,通常用于支持 REPEATABLE READ 隔离级别下的一致性读取。