【面试题】MySQL常用的储存引擎MYISAM和InnoDB的区别
MySQL常用的储存引擎
事务支持
MyISAM不支持事务,而InnoDB支持,并且默认是自动提交,在spring中的事务操作其实也是在操作数据库的事务;
文件储存结构
MYISAM:
- role.frm:表结构文件
- role.MYD:数据文件(MyISAM Data)
- role.MYI:索引文件(MyISAM Index)
InnoDB:
- user.frm:表结构文件
- user.ibd:索引和数据文件(InnoDB Data)
底层结构
底层都是用的B+Tree来存储的
- MYISAM:叶子节点储存的是数据的地址
- InnoDB:叶子节点储存的是数据,所以InnoDB 的索引也被称为聚集索引
锁
- MYISAM支持表锁,不支持行锁。
- InnoDB 支持表锁和行锁。
表主和外键
-
MYISAM 允许没有任何索引和主键的表存在,索引都是保存行的地址
-
InnoDB 如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键(用户不可见)
-
MYISAM 不支持外键
-
InnoDB 支持外键