MySQL:存储引擎

228 阅读2分钟

存储引擎

(内容待补充)

什么是存储引擎?

存储引擎这个名字只有在MySQL中存在(Oracle中有对应的机制,但不叫存储引擎,就只是表的存储方式)

MySQL支持很多存储引擎,每个存储引擎都对应了一种不同的存储方式,每一个存储引擎都有自己的优缺点,需要在合适的时机选择合适的存储引擎

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

  • show engines \G

完整建表语句

create table t_x(
    id int(11)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

建表的时候可以指定存储引擎,也可以指定字符集

MySQL默认使用的存储引擎是 InnoDB 的方式,默认采用字符集 utf8 (安装MySQL的时候有选)

常见的存储引擎

MyISAM

  • MyISAM这种存储引擎不支持事务

  • MyISAM是MySQL最常用的存储引擎,但是这种存储引擎不是默认的

  • MyISAM采用三个文件组织一张表

    xxx.frm(存储格式的文件,format)

    xxx.MYD(存储表中数据的文件,Data)

    xxx.MYI(存储表中索引的文件,Index)

  • 优点:可被压缩,节省存储空间。并且可以转换为只读,提高检索效率

  • 缺点:不支持事务

InnoDB

  • 优点:支持事务、行级锁、外键等。这种存储引擎数据的安全得到保障

  • 表的结构存储在xxx.frm 文件中

  • 数据存储在 tablespace 这样的表空间中(逻辑概念),无法被压缩,无法转换成只读。

  • 这种InnoDB存储引擎在MySQL数据库崩溃之后提供自动恢复机制。

  • InnoDB支持级联删除和级联更新(一般不用的)

    级联删除:删除了父表的数据,字表的外键引用的数据也全部被删除

    级联更新:修改了父表的数据,字表的外键引用的数据也全部被修改

memory

优点:查询速度是最快的

缺点:不支持事务、不支持回滚,数据容易丢失,因为所有数据和索引都是存储在内存当中的

MEMORY以前叫做HEPA