存储引擎
1. MySQL 都支持那些存储引擎
MySQL支持多种存储引擎,比如InnoDB,MyISAM,Memory,Archive等等.在大多数的情况下,直接选择使用
InnoDB引擎都是最合适的,InnoDB也是MySQL的默认存储引擎.
2. MyISAM 和 InnoDB 的区别:
1.是否支持行级锁
MyISAM 只有表级锁(table-level locking),而 InnoDB 支持行级锁(row-level locking)和表级锁,默认为行级锁。
也就说,MyISAM 一锁就是锁住了整张表,这在并发写的情况下是多么滴憨憨啊!这也是为什么 InnoDB 在并发写的时候,性能更牛皮了!
2.是否支持事务
MyISAM 不提供事务支持。
InnoDB 提供事务支持,具有提交(commit)和回滚(rollback)事务的能力。
3.是否支持外键
MyISAM 不支持,而 InnoDB 支持。
4.是否支持数据库异常崩溃后的安全恢复
MyISAM 不支持,而 InnoDB 支持。
使用 InnoDB 的数据库在异常崩溃后,数据库重新启动的时候会保证数据库恢复到崩溃前的状态。这个恢复的过程依赖于 redo log
。
🌈 拓展:
-
MySQL InnoDB 引擎使用 redo log(重做日志) 保证事务的持久性,使用 undo log(回滚日志) 来保证事务的原子性。
-
MySQL InnoDB 引擎通过 锁机制、MVCC 等手段来保证事务的隔离性( 默认支持的隔离级别是
REPEATABLE-READ
)。 -
保证了事务的持久性、原子性、隔离性之后,一致性才能得到保障。
5.是否支持 MVCC
MyISAM 不支持,而 InnoDB 支持。
MyISAM 连行级锁都不支持,而MVCC 可以看作是行级锁的一个升级,可以有效减少加锁操作,提供性能。
6. InnoDB 在5.6版本以前不支持全文索引,5.6版本之后支持全文索引;MyISAM 支持;
🐛 拓展
MVCC(Multi-Version Concurrency Control)多版本并发控制,可以简单地认为:MVCC就是行级锁的一个变种(升级版)。