MySQL中的存储引擎

103 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第4天,点击查看活动详情

存储引擎

CREATE TABLE dept ( DEPTNO int(2) NOT NULL, DNAME varchar(14) DEFAULT NULL, LOC varchar(13) DEFAULT NULL, PRIMARY KEY (DEPTNO) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

建表的时候可以指定存储引擎,也可以指定字符集。 MySql默认使用的存储引擎是InnoDB方式。默认采用的字符集是UTF8。

什么是存储引擎呢?

存储引擎这名字只有在mysql中存在。(oracle中有相应的机制,但是不叫做存储引擎。Oracle中没有特殊的名字,就是”表的存储方式”) Mysql支持很多存储引擎,每一个存储引擎都对应了一种不同的存储方式。 每一个存储引擎都有自己的优缺点,需要在合适的时机选择合适的存储引擎。

查看当前mysql支持的存储引擎

show engines

image.png Mysql 5.7.27版本支持的存储引擎有9个。

MyISAM存储引擎

MyISAM存储引擎是mysql最常用的引擎。 它管理的表具有以下特征:

  • 使用三个文件表示每个表:
    • 格式文件-存储表结构的定义(mytable.frm)
    • 数据文件-存储表行的内容(mytable.MYD)
    • 索引文件-存储表上索引(mytable.MYI)
  • 灵活的AUTO_INCREMENT字段处理
  • 可被压缩,节省存储空间。并且可以转换为只读表,提高检索效率。缺点:不支持事务。

InnoDB存储引擎

InnoDB存储引擎是mysql的缺省引擎。 它管理的表具有下列主要特征:

  • 每个InnoDB表在数据库目录中以.frm格式文件表示
  • InnoDB表空间tablespace被用于存储表的内容
  • 提供一组用来记录事务性活动的日志文件
  • 用commit(提交)、SQVAPOINT及ROLLBACK(回滚)支持事务处理
  • 提供全ACID兼容
  • 在mysql服务器崩溃后提供自动恢复
  • 多版本(MVCC)和行级锁定
  • 支持外键及引用的完整性,包括级联删除和更新

MEMORY存储引擎

使用MEMORY存储引擎的表,其数据存储在内存中,且行的长度固定,这两个特点使得MEMORY存储引擎查询速度最快。 MEMORY存储引擎管理的表具有下列特征:

  • 在数据库目录内,每个表均以.frm格式的文件表示。
  • 表数据及索引被存储在内存中。
  • 表级锁机制。
  • 不能包含TEXT或BLOB字段。
  • MEMORY存储引擎以前被称为HEAP引擎。
  • 不支持事务数据容易丢失。

总结

  • MyISAM表最适合于大量的数据读而少量数据更新的混合操作。MyISAM表的另一种适合情形是使用压缩的只读表。
  • 如果查询中包含较多的数据更新操作,应使用InnoDB。其行级锁机制和多版本的支持为数据读取和更新的混合操作提供了良好的并发机制。
  • 可使用MEMORY存储引擎来存储非永久需要的数据,或者是能够从基于键盘的表中重新生成的数据。

本文内容到此结束了,

如有收获欢迎点赞👍收藏💖关注✔️,您的鼓励是我最大的动力。

如有错误❌疑问💬欢迎各位大佬指出。

主页共饮一杯无的博客汇总👨‍💻

保持热爱,奔赴下一场山海。🏃🏃🏃