MySQL中的表引擎与字符集
文章目录
概述
服务端处理客户端请求的过程大致可以理解为以下这个图,存储引擎以前被称为表处理器
它是接收上层命令,对表中的数据进行增删改查的操作,第1部分与第2部分这种不涉及对
真实数据存储的功能都被划分至MySQL server
innodb与myisam的区别
- 事务支持
innodb支持acid事务操作,myisam不支持,事务是数据库执行的基本单元
acid事务的四个特征:
Atomicity(原子性):要么全都做了,要么全都没做
Consistency(一致性):串行调度中事务要保持一致性
Isolation(隔离性):多个事务并行调度时事物具有隔离性互相不影响
Durability(持久性):一个事务执行完毕,其结果不能丢失,对数据库影响是永久的 - 存储结构
MyISAM:每个MyISAM在磁盘上存储成三个文件
.frm文件存储表结构
.MYD文件存储数据
.MYI文件存储索引
InnoDB:主要分为两种文件进行存储
.frm 存储表结构
.ibd 存储数据和索引(也可能是多个.ibd文件,或者是独立的表空间文件) - 表锁差异
myisam只支持表级锁,innodb支持行级锁与事务锁 - 表主键
myisam允许没有任何索引和主键的表存在,索引都是保存行的地址
innodb如果没有设定主键或者非空唯 一索引,就会自动生成一个6字节的主键 - 表的具体行数
myisam保存有表的总行数,如果select count() from table,会直接取出出该值
innodb没有保存表的总行数,但如果使用where,两者是一样的 - CURD操作
myisam如果执行大量的SELECT,myisam是更好的选择
innodb如果你的数据执行大量的INSERT或UPDATE,应该使用innodb表 - 外键
myisam不支持,innodb支持 - 查询效率
myisam相对简单,所以在效率上要优于innodb,小型应用可以考虑使用myisam - 应用场景
默认使用innodb,但如果业务相对较小,没有高并发的需求,且SELECT语句被大量
地使用,则可以考虑使用myisam
MySQL的字符集
MySQL中的 utf8 字符集分为两个,如果字符集设置utf8,则默认为utfmb3,而不是mb4
utf8mb3 :阉割过的 utf8 字符集,只使用1~3个字节表示字符
utf8mb4 :正宗的 utf8 字符集,使用1~4个字节表示字符