面试题答案
一键面试锁机制
- InnoDB:
- 支持行级锁和表级锁,默认采用行级锁。行级锁可以最大程度地支持并发操作,减少锁争用。例如在高并发写入场景下,不同的事务可以同时修改不同行的数据,而不会相互阻塞。
- 对于索引结构,InnoDB 对辅助索引和聚簇索引都支持行锁,从而提升并发性能。
- MyISAM:
- 只支持表级锁。当对表进行写入操作(INSERT、UPDATE、DELETE)时,会锁定整个表,其他线程对该表的读和写操作都将被阻塞。在读取操作(SELECT)时,虽然可以并发读取,但只要有一个写操作,就会等待读操作完成后才能执行,这会导致在高并发读写场景下性能瓶颈明显。
事务支持
- InnoDB:
- 完全支持事务,遵循 ACID 特性(原子性、一致性、隔离性、持久性)。可以通过
START TRANSACTION
、COMMIT
、ROLLBACK
等语句来控制事务。例如,在银行转账操作中,从账户 A 向账户 B 转账,这两个操作可以放在一个事务中,要么都成功,要么都失败,保证数据的一致性。 - 提供多种事务隔离级别,包括读未提交(READ - UNCOMMITTED)、读已提交(READ - COMMITTED)、可重复读(REPEATABLE - READ)、串行化(SERIALIZABLE),默认隔离级别为可重复读。不同的隔离级别可以满足不同的业务需求。
- 完全支持事务,遵循 ACID 特性(原子性、一致性、隔离性、持久性)。可以通过
- MyISAM:
- 不支持事务。这意味着如果执行一系列操作,在中间出现错误,无法回滚到操作前的状态。例如在插入多条数据时,如果其中一条插入失败,之前插入的数据不会自动回滚,可能导致数据不一致。
并发性能
- InnoDB:
- 由于支持行级锁和事务,在高并发读写场景下表现更好。它能有效减少锁争用,允许更多的并发操作同时进行,特别适合 OLTP(联机事务处理)类型的应用,如电商订单系统、银行交易系统等。
- MyISAM:
- 表级锁的特性使得在高并发读写场景下容易出现锁争用,导致性能下降。它更适合以读为主、写入操作较少的场景,如简单的博客系统、新闻发布系统等,在这些场景下数据一致性要求相对不那么严格。