前言
课程是b站的【开课吧】发布的《MySQL基础+进阶》的系列课程。本篇用来记录一些知识点。
一、MySQL引擎
MyISAM和InnoDB表引擎的区别
1. 事务支持
MyISAM不支持事务,而InnoDB支持。
2. 存储结构
MyISAM:每个MyISAM在磁盘上存储成三个文件。
- .frm 文件存储表结构
- .MYD 文件存储数据
- .MYI 文件存储索引
InnoDB:主要分为两种文件进行存储
- .frm 文件存储表结构
- .ibd 存储数据和索引
3. 表锁差异
MyISAM:只支持表级锁(简单理解就是把表锁定)。
InnoDB:支持事务和行级锁,是 InnoDB 的最大特色。行锁大幅度提高了多用户并发操作,但 InnoDB 的行锁是由索引建立,如果索引失效或者没有使用索引,那么会由行锁升级为表锁。
4. 表主键
MyISAM:允许存在没有索引和主键的表。索引都是保存行的地址。
InnoDB:如果没有设置主键或非空唯一索引,数据库会自动生成一个6字节的主键(用户不可见)。
5. 表的具体行数
MyISAM:存储行数。用 SELECT COUNT() FROM table 可以直接获取行数。
InnoDB:不存储行数。 用 COUNT() 无法直接获取行数,必须遍历。消耗大。
6. CURD操作
MyISAM:如果 SELECT 语句较多,推荐使用。
InnoDB:如果 INSERT、UPDATE 语句较多,推荐使用。
7. 外键
MyISAM:不支持。
InnoDB:支持。
8. 查询效率
MyISAM相对简单,查询效率高于 InnoDB,但日常开发推荐 InnoDB。