总结一下MySQL数据库MyISAM和InnoDB存储引擎的区别

目录

1、索引的支持

2、存储数据的方式

3、锁机制

4、对事务的支持:

5、对外键的支持

6、表的主键

7、灾难恢复


1、索引的支持

InnoDB支持聚簇索引和非聚簇索引;MyISAM只支持非聚簇索引;

Innodb不支持全文索引,而MyISAM支持全文索引,全文索引只能加在char、varchar、text这几种数据类型类型的字段上

2、存储数据的方式

InnoDB存储表信息只用了两个文件,一个存储表结构,另外一个文件存储索引和数据,也就是说,innodb存储引擎的索引和数据是存到一起的;

MyISAM存储表信息用了3个文件,分别用于存储表结构、数据和索引,索引和数据是分开存储的。

这是因为InnoDB存储的聚簇索引的B+树叶子节点存了完整的数据;

MyISAM存储引擎的非聚簇索引B+树叶子节点保存的是数据的地址或指针;

3、锁机制

InnoDB支持行级锁和表级锁默认是行级锁,行级锁只能加在索引上,如果字段没有设置索引,将会自动升级为表锁;

MyISAM只支持表级锁。MyISAM的表级锁类似于读写锁,在读的时候是共享锁,写的时候是独占锁,在读操作的时候不会影响读数据的效率,但是写的时候会直接锁住整张表,在写操作并发量较大的时候不如InnoDB;

InnoDB支持多版本并发控制(MVCC),MyISAM不支持;

4、对事务的支持:

InnoDB支持事务,而且在没有手动使用事务的情况下,它默认将每一条DML的sql语句都看做一个事务;

MyISAM不支持事务;

5、对外键的支持

InnoDB支持外键,但是MyISAM不支持外键;

6、表的主键

MyISAM支持表不设置主键,但是InnoDB必须要设置主键,如果没有设置主键,会自动生成一个6字节的隐藏列作为主键,如果没有设置主键,将使用隐藏主键作为聚簇索引的B+树的根节点;

7、灾难恢复

MyISAM在数据库崩溃之后不支持数据恢复;

InnoDB支持,主要依赖于各种日志文件:redo log、undo log、bin log。

你可能感兴趣的:(数据库,mysql)