上节学习了mysql命令行,在添加外键索引的时候涉及到了存储引擎的问题,(只有InnoDB存储引擎才会分析执行添加外键语句,其他存储引擎会忽略),这节就对存储引擎进行分析学习。
什么是存储引擎?
MySQL用各种不同的技术来存储数据到内存或文件中,这些不同的技术使用不同的存储机制,索引技巧,锁定水平并提供不同的功能。这些不同的技术及提供的相关功能在MySQL中称为存储引擎(也称表类型),开发者可以自由选择适合你的服务器,数据库,表结构的存储引擎,这样可以灵活地选择如何存储,检索你的数据信息,这正是MySQL受欢迎的原因。
有哪些存储引擎?
用察看引擎的命令:show engines;
该表格显示了可用的全部存储引擎,以及该数据库服务器是否支持这些存储引擎。
MyISAM:(1)MySQL默认的存储引擎,(当然也可以配置为默认其他的存储引擎,如InnoDB,但当不配置时,默认就是MyISM) (2) 拥有较高的插入,查询速度, (3)不支持事务, (4)所有MyISAM 表在磁盘上存储成三个文件,一个是.frm文件,存储表的结构; 一个是.MYD数据文件,存储表中的数据;一个是.MYI 索引文件,存储表中的索引,使得备份和恢复非常方便。
MySQL最大的优势在于MyISAM引擎下的简单SELECT,INSERT和UPDATE快速操作
MEMORY:所有数据置于内存的存储引擎,具有极高的插入,更新,查询速度但会占用跟数据量成正比的内存量,而且数据会在MySQL关闭时丢失。适用于临时数据表
InnoDB:事务型数据库的首选引擎,支持ACID事务,支持行级锁定,和外键,每个InnoDB表对应磁盘中的.frm文件,并没有.MYD数据文件和.MYI索引文件。所以数据恢复比MyISAM要慢。
BDB:BerkeleyDB 事务型数据库的另一选择,支持COMMIT和ROLLBACK等其他事务特性。
BlackHole:黑洞,写入的任何数据都会丢失,一般用于记录binlog做复制的中继
EXAMPLE:是一个‘存根’引擎,它不做什么,你可以用这个引擎创建表,但并不会有数据存于其中,它的目的是服务,只是MySQL存储引擎的一个例子,演示说明如何如何开发存储引擎,有兴趣者可以查看其源代码。
Archive:适合存储大量的,作为历史记录的数据,插入速度非常快,但对查询的支持较差,用来无索引地,非常小地覆盖大量数据
CSV:逻辑上用逗号分隔数据的存储引擎,并存于文本文件
ndbcluster:MySQL Cluster用来实现分割到多个计算机上的表的存储引擎,它在MySQL –MAX 5.1分发版中提供,当前只被linux,Solaris,Mac OS支持。
federated:将不同的mysql服务器联合起来,形成逻辑上的数据库,适合分布式应用
ISAM:是MyISAM出现之前的默认表类型,现在已不推荐使用。MyISAM是以ISAM为基础的,MyISAM表比ISAM表要小
以上可以看出,InnoDB和BDB是一类型的,都支持事务,属于事务安全型。其他为非事务安全型。
任何一种表都不是万能的,只有恰当地针对业务类型来选择合适的表类型,才能最大化地发挥MySQL 的性能优势;