存储引擎
存储引擎以前又叫做表处理器,它的功能就是接受上层传下来的指令,然后对表中的数据进行提取或写入操作
MyISAM和InnoDB表引擎的区别
1、事务支持
myisam 不支持 事务,innoDB支持
2、存储结构
MyISAM:每个MyISAM在磁盘上存储成三个文件
- .frm文件存储表的结构
- .MYD文件存储数据
- .MYI文件存储索引
InnoDB:主要分为两种文件进行存储
- .frm 存储表结构
- .ibd存储数据和索引(也可能是多个.ibd文件,或者是独立的表空间文件)
区别:数据和索引是分开存储还是混合存储
3、表锁差异
后面补充,这里只简单说一下区别
MyISAM:只支持表级锁
InnoDB:支持事务和行级锁,InnoDB的行锁是基于索引建立的,如果索引失效或者没有使用索引,那么行锁会升级为表锁
4、表主键
MyISAM:允许没有任何索引和主键的表存在,索引都是保存行的地址
InnoDB: 如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键
5、表的具体行数
MyISAM:保存有表的总行数,使用select count() from table;会直接取出该值
InnoDB:如果没有保存表的总行数(只能遍历),消耗比较大,但是加了where条件后,MyISAM和innoDB处理的方式都一样
6、CRUD操作
MyISAM:如果执行大量的select,选择MyISAM
InnoDB:如果你的数据执行大量的insert或update,出于性能考虑,应该使用InnoDB
实际上,我们都该使用InnoDB
7、外键
MyISAM:不支持
InnoDB : 支持
Mysql中的utf8和utf8mb4
我们上边说 utf8 字符集表示一个字符需要使用 1 ~ 4 个字节,但是我们常用的一些字符使用 1 ~ 3 个字节就可以表示 了。而在 MySQL 中字符集表示一个字符所用最大字节长度在某些方面会影响系统的存储和性能,所以设计 MySQL 的大叔偷偷的定义了两个概念:- utf8mb3 :阉割过的 utf8 字符集,只使用1~3个字节表示字符。
- utf8mb4 :正宗的 utf8 字符集,使用1~4个字节表示字符。
在mysql中utf8是utf8mb4的别名,所以之后在mysql中提到utf8就意味着使用1~3个字节来表示一个字符,如果大家有使用4字节编码一个字符的情况,比如存储一些emoji表情啥的,那请使用 utf8mb4