存储引擎
(内容待补充)
什么是存储引擎?
存储引擎这个名字只有在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