MySql常见数据库引擎特点

大家好,今天和大家分享一些关于MySQL数据库的一些知识,主要是一些关于数据库存储引擎上的区别。

其实,我们在日常使用的数据库中,最为常见的数据库引擎大概有四种,分别是MyISAM,InnoDB,MEMORY,以及MERGE,这四种数据库存储引擎有着各自的特点和区别,今天就和大家简单分享一下这四种存储殷勤的区别。简要区别如下:
MyISAM:
有存储限制,表的定义语句,数据,索引分文件存储,分别为.frm文件,.MYD(MyDate),.MYI文件(MyIndex),存储方式分静态表(默认),动态表,压缩表。静态表中表字段定长,存储速度快,容易缓存,出现故障容易恢复,但是空间浪费严重。动态表中表字段不定长,空间浪费小,但是崩溃不易恢复,频繁的删除和更新会产生大量的碎片,可以使用OPTIMIZE TABLE命令定期清理碎片。同时MyISAM存储殷勤不支持外键,也不支持事务处理,但是其优势为访问速度快,在使用中中,如果对事务完整性没有要求,或者数据库操作主要以Select或者Insert为主的应用基本上可以使用这种存储引擎,而且MyISAM存储殷勤在也是5.5版本之前MySQL默认的存储引擎。
InnoDB:
提供回滚,提交,崩溃恢复的事务安全,唯一支持外键,表中的自动增长列必须是索引,如果是组合索引,必须是组合索引的第一列,并且自动增长列支持手动插入,但是如果插入值为空或者0,则实际值为增长后的值。创建外键时,要求父表必须有对应的索引,子表在创建外键的时候,也会自动创建对应的索引。如果某个表被其他表创建了外键参照,那么该表的对应索引或者主键禁止被删除。但是在创建索引时,可以指定在对父表进行删除或者更新时,子表所对应的操作,这些操作包括以下几种:
RESTRICT,CASCADE,SET NULL,NO ACTION,其实RESTRICT和NO ACTION作用相同,是指在子表有关联记录的时候,父表不允许更新,CASCADE是指在父表执行更新或者删除操作时,更新或者删除子表对应的记录,SET NULL是指在父表执行删除或者更新操作时,子表相应字段设置为NULL。
InnoDB在存储方式上,分为共享表空间和使用多表空间存储。
MEMORY:
数据存储在内存中,每一个MEMORY表对应一个磁盘文件,格式为.frm。由于数据存储在内存中,所以这种索引在数据存储和数据查询方面速度最快,但是服务器停止,数据丢失。并且在索引方面默认使用HASH索引,
MERGE:
多个MyISAM表的集合,实际没有建立新表,而是将MyISAM集合到一起。在磁盘上保存有两个文件,一个.frm文件存储表的定义语句,另外一个是.MRG文件,包含了组合表的信息,包括MERGE表由哪些表组成,插入新的数据时的依据。如果想MERGE表中插入数据,其中MERGE表所包含的MyISAM表中都会对该数据进行存储,但是向其中一个MyISAM表插入数据时,只有当前被插入数据的MyISAM表会有相应的数据,当然MERGE表中也会有,但是另外的MyISAM表不会存储该数据。简单而言MERGE表就是多个MyISAM表的并集。
以下是摘自《深入浅出MySQL》一书中的各个存储引擎之间的特性:
这里写图片描述
好了,暂时就和大家简单分享这些知识,如有不当之处,还请大家多多指教。

相关内容推荐