从本质上说,数据库就是数据的集合,具体到计算机上系统上,数据库可以是磁盘上一些文件的集合或者一些内存数据的集合。
常见的MySql登数据库,其实是数据库管理系统,它们可以存储数据,并提供查询和更新数据库中的数据的功能等,即帮助我们管理数据文件,而存储引擎说白了就是如何存储数据、如何为数据建立索引、如何更新、查询数据等技术的实现方法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型)。
mysql中可以使用show engines;命令查看服务器支持的存储引擎类型
可以看出,当前服务器默认的存储引擎是InnoDB,mysql5.5及以后版本默认的是InnoDB引擎,之前版本默认的是MyISAM存储引擎。
查看表使用的存储引擎
表使用的存储引擎是MyISAM,字符集是utf8
使用show table status命令也能查看表的存储引擎
存储引擎既能在创建表的时候指定,如
CREATE TABLE TABLE_NAME (
COLUMN1 ...
) engine = engine_name;
如果创建表时未指定存储引擎,则使用默认的存储引擎
也能在建完表后修改存储引擎,如
ALTER TABLE TABLE_NAME engine = engine_name;
各存储引擎比较
其中,最常用的存储引擎是MyISAM和InnoDB
MyISAM
MyISAM存储引擎访问速度快,但不支持事务,不支持外键约束,只支持表锁,对事务完整性没有要求或者以查询为主的数据库可以选择该存储引擎。MyISAM存储引擎会在data目录(默认为安装目录下的data目录,可在安装时指定)下生成三个文件,.frm(存储表定义)、MYD(MYData,存储数据)、MYI(MYIndex,存储索引)
InnoDB
InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全,支持行锁,但是相较于MyISAM存储引擎,InnoDB写的处理效率差一些,因为需要记录事务日志,并且会占用更多的磁盘空间以保留数据和索引。InnoDB是唯一支持外键的存储引擎,可以使用set foreign_key_checks=0;临时关闭外键约束,
set foreign_key_checks=1;打开约束。默认情况下,InnoDB存储引擎会在数据目录下生成以下文件
其中ibdata1文件存储数据和索引信息,而下面两个文件存储事务信息;ibdata1是所有表共享的,mysql还能通过设置innodb_file_per_table = 1使得每张表有自己独立的存储空间
test表的存储引擎为InnoDB
到数据目录下查看文件格式
data目录下每个数据库会有一个目录,dept、emp、salgrade表时MyISAM存储引擎,而student、test表是InnoDB存储引擎
此外还有一种存储引擎,BLACKHOLE,黑洞存储引擎,正如show engines;命令描述的,任何写入的东西都会消失,这种存储引擎在mysql的主从复制中架构中可能会使用到。