执行show engines;下方DEFAULT为InnoDB存储引擎
Supports transactions, row-level locking, and foreign keys 意思是支持事物,行级锁,外键。
MySQL 5.5.5 之前,MyISAM 是 MySQL 的默认存储引擎。5.5.5 版本之后,InnoDB 是 MySQL 的默认存储引擎。
执行select version();
可以看到我的mysql版本是8.2.0,所以默认的存储引擎为InnoDB
直接执行SHOW VARIABLES LIKE ‘%storage_engine%’;也可以查看搜索引擎。
锁粒度:InnoDB支持行级别的锁粒度,这意味着它可以在并发访问时更细粒度地控制数据的访问和修改。而MyISAM只支持表级别的锁粒度,无法同时并发地修改同一表中的不同行。
事务支持:InnoDB提供了事务支持,符合SQL标准,并实现了四个隔离级别(读未提交、读已提交、可重复读、串行化)。而MyISAM不支持事务,它的操作是自动提交的,无法进行回滚或保证数据的一致性。
外键支持:InnoDB支持外键约束,可以在表之间建立引用关系,确保数据的完整性和一致性。而MyISAM不支持外键约束,无法强制实施引用完整性。
MVCC支持:InnoDB使用多版本并发控制(MVCC)来管理数据的并发访问。这意味着读操作不会被写操作所阻塞,同时保证了读取的数据是一致的快照。而MyISAM不支持MVCC,读操作和写操作可能会相互阻塞,影响并发性能。
索引结构:InnoDB和MyISAM都使用B+树作为索引结构,但它们的实现方式有所不同。InnoDB的主键索引和辅助索引都是B+树,而MyISAM的主键索引使用B+树,辅助索引使用B树。
安全恢复:InnoDB支持数据库异常崩溃后的安全恢复机制,通过事务日志(redo log)来恢复数据的一致性。而MyISAM不提供类似的安全恢复机制,如果发生异常崩溃,可能会导致数据损坏或丢失。