MySQL中InnoDB和MyISAM区别是什么?目前主流的MySQL版本主要使用哪种存储。
InnoDB:
1、innodb是mysql5.1之后默认的存储引擎,他支持事务、索引、表锁、行锁,支持系统崩溃恢复能力;
2、如果没有给表设定主键、他会去看我们表中有没有唯一索引,如果也没有唯一索引,那么会给生成一个rowid作为主键字段;
3、一般使用innodb创建表分别生成两个文件一个是*.frm,*.idb;他是索引文件跟数据在一起的,也就是聚簇索引;
MyISAM:
1、 mysql5.1之前默认的存储引擎,不支持事务,行锁,不支持系统崩溃恢复能力; 它支持表锁;他的插入和查询效率比较快。
2、使用myiam创建表他会生成三个文件分别是*.frm, *.myd(数据文件), *.myi(索引文件), 他是索引跟数据分开存储的,也就是非聚簇索引;
详情可以参考这篇博文:https://blog.csdn.net/qq_42878086/article/details/126429604
这两种存储引擎有以下区别:
事务处理
InnoDB 支持事务处理,即对数据的修改可以使用事务来管理,保证数据的完整性和一致性。MyISAM 不支持事务处理。
外键
InnoDB 支持外键,可以在表之间建立外键约束,限制表中的数据的插入和删除,保证数据的完整性。MyISAM 不支持外键。
行级锁
InnoDB 支持行级锁,在多用户并发访问数据库时,可以保证同一行数据只能被一个用户修改,从而避免数据冲突。MyISAM 不支持行级锁,只支持表级锁。
索引
InnoDB 使用 B-Tree 索引,支持前缀索引。MyISAM 使用 B-Tree 或者全文索引,不支持前缀索引。
表空间
InnoDB 使用表空间的方式管理数据和索引,表空间可以动态扩展,可以更好地利用磁盘空间。MyISAM 使用文件的方式管理数据和索引。
目前主流的 MySQL 版本主要使用 InnoDB 存储引擎。InnoDB 提供了丰富的功能和高性能,并且支持多种数据库特性,如事务处理、外键、行级锁等,适用于各种应用场景。
全表扫描
。MyISAM用一个变量
保存了表的行数。事务
,MyISAM不支持。外键
,MyISAM不支持。行级锁
。MyISAM只有表级锁
。写密集
的表,MyISAM适合读密集
的表。