MySQL面试题及答案
MySQL是当今最流行的关系型数据库管理系统,广泛应用于各种Web应用程序中。总结了MySQL面试题及答案,涵盖了MySQL的基本概念、事务、索引、锁、优化等方面的知识点。
-
事务的基本特征
事务是指一个数据库操作序列,具有原子性、一致性、隔离性和持久性四大特征。原子性是指一个事务必须视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚。隔离性是指一个事务所做的修改在最终提交以前,对其他事务是不可见的。持久性是指一度事务提交,则其所做的修改就会永久保存到数据库中。
-
事务的隔离级别
MySQL的默认隔离级别是Repeatable read。事务的隔离级别有四种:读未提交、读已提交、可重复读和串行化。读未提交是指一个事务可以读取另一个未提交事务的数据,读已提交是指一个事务要等另一个事务提交后才能读取数据,可重复读是指在开始读取数据(事务开启)时,不再允许修改操作,串行化是指事务串行化顺序执行,可以避免脏读、不可重复读与幻读。
-
脏读、不可重复读、幻读
- 脏读:事务A读取了事务B更新的数据,然后B回滚操作,导致A读取到的数据是脏数据。
- 不可重复读:事务A多次读取同一数据,事务B在此过程中更新并提交,导致A读取结果不一致。
-
幻读:事务A读取了事务B插入的数据,B回滚后,A读取到的数据是幻影数据。
-
数据表类型
MySQL支持多种数据表类型,包括MyISAM、InnoDB、HEAP、ISAM、MERGE和Gemini等。MyISAM和InnoDB是最常用的两种类型。
-
InnoDB引擎的特性
InnoDB引擎有四大特性:插入缓冲、双写、自适应哈希索引和预读。
- 插入缓冲:将插入操作缓存在内存中,以提高插入速度。
- 双写:将数据写入到磁盘和内存中,以确保数据的一致性。
- 自适应哈希索引:根据查询的频率和分布情况,动态创建和维护索引。
-
预读:根据查询的模式和频率,预先读取数据到内存中,以提高查询速度。
-
InnoDB引擎的行锁
InnoDB引擎的行锁是基于索引实现的,可以锁定指定的行,以避免其他事务对该行的修改和读取。
-
MyISAM与InnoDB的区别
MyISAM和InnoDB是MySQL中两种最常用的存储引擎。MyISAM不支持事务,而InnoDB支持完整的ACID事务特性,适合于需要高并发和数据一致性的应用场景。