MySQL中的表引擎与字符集


概述

服务端处理客户端请求的过程大致可以理解为以下这个图,存储引擎以前被称为表处理器
它是接收上层命令,对表中的数据进行增删改查的操作,第1部分与第2部分这种不涉及对
真实数据存储的功能都被划分至MySQL server
在这里插入图片描述


innodb与myisam的区别

  1. 事务支持
    innodb支持acid事务操作,myisam不支持,事务是数据库执行的基本单元
    acid事务的四个特性:
    Atomicity(原子性):要么全都做了,要么全都没做
    Consistency(一致性):串行调度中事务要保持一致性
    Isolation(隔离性):多个事务并行调度时事物具有隔离性互相不影响
    Durability(持久性):一个事务执行完毕,其结果不能丢失,对数据库影响是永久的
  2. 存储结构
    MyISAM:每个MyISAM在磁盘上存储成三个文件
    .frm文件存储表结构
    .MYD文件存储数据
    .MYI文件存储索引
    InnoDB:主要分为两种文件进行存储
    .frm 存储表结构
    .ibd 存储数据和索引(也可能是多个.ibd文件,或者是独立的表空间文件)
  3. 表锁差异
    myisam只支持表级锁,innodb支持行级锁与事务锁
  4. 表主键
    myisam允许没有任何索引和主键的表存在,索引都是保存行的地址
    innodb如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键
  5. 表的具体行数
    myisam保存有表的总行数,如果select count() from table,会直接取出出该值
    innodb没有保存表的总行数,但如果使用where,两者是一样的
  6. CURD操作
    myisam如果执行大量的SELECT,myisam是更好的选择
    innodb如果你的数据执行大量的INSERT或UPDATE,应该使用innodb表
  7. 外键
    myisam不支持,innodb支持
  8. 查询效率
    myisam相对简单,所以在效率上要优于innodb,小型应用可以考虑使用myisam
  9. 应用场景
    默认使用innodb,但如果业务相对较小,没有高并发的需求,且SELECT语句被大量
    地使用,则可以考虑使用myisam

MySQL的字符集

MySQL中的 utf8 字符集分为两个,如果字符集设置utf8,则默认为utfmb3,而不是mb4
utf8mb3 :阉割过的 utf8 字符集,只使用1~3个字节表示字符
utf8mb4 :正宗的 utf8 字符集,使用1~4个字节表示字符


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值