存储引擎是什么?对于数据库来说,存储引擎是实现数据库底层数据的数据结构定义、存储以及查询等操作的模块或功能。
不同的数据库具体不同的底层存储机制,也就是不同的存储引擎。数据库服务器在接收到客户端的SQL请求时,会将具体操作交由底层的存储引擎进行处理。
如果你接触Oracle或mssql等数据库,你可能没有过多关注这些数据库的存储引擎,这是因为无论是Oracle还是mssql,都只有一种存储引擎,而且用户是不能修改其存储引擎的。相比于其他数据库,MySQL提供多种存储引擎,以满足不同的存储需求。
MySQL服务器的存储引擎是一种"可插入"式体系结构,它提供了一个标准接口,实现了存储引擎的动态加载与卸载,这是MySQL实现多种存储引擎的基础,除了MySQL数据库默认提供的存储引擎外,MySQL支持第三方引擎的集成,通过MySQL提供的标准接口,第三方存储引擎可以非常方便地集成到我们MySQL服务器,也就是说,如果MySQL提供的存储引擎不能满足我们的需求,我们可以定制自己存储引擎来满足自己的需求。
在MySQL中,存储引擎也叫数据表处理器或表类型,不同的存储引擎实现的效果各不相同,同一存储引擎处理的数据表有共同的属性与特征,我们可以根据自己应用程序使用的不同场景、存储数据的大小来使用不同的存储引擎。
简单地说了点理论之后,下面我们开始学习MySQL的存储引擎,内容主要有以下几个方面。
1.查看数据库支持的存储引擎
在使用存储引擎之前,我们需要知道MySQL服务器支持哪些存储引擎,可以执行下面两个语句。
SHOW ENGINES;
或
SELECT * FROM INFORMATION_SCHEMA.ENGINES;
执行结果如下图所示:
MySQL服务器支持的存储引擎信息存储在INFORMATION_SCHEMA数据库的ENGINES表中,我们可以通过SELECT语句查询该表得到的结果。不过使用SHOW ENGINES,则更加方便。
ENGINES表存放存储引擎的基本信息,ENGINES表字段含义如下:
Engine:存储引擎名称。 Support:存储引擎是否可用,YES表示可用,NO表示不可用,DEFAULT表示数据库默认的存储引擎。 Comment:存储引擎的介绍信息。 Transactions:是否支持事务。 XA:是否支持分布式事务处理。 Savepoints:是否支持部分事务回滚。
2.查看与设置默认存储引擎
当ENGINES表Support字段值为DEFAULT时,则表示该存储引擎为默认存储引擎,除此之外,还有其他查看或设置默认存储引擎的方式。
(1).启动mysql服务器时设置默认存储引擎
通过mysqld程序启动服务器时,可在该程序后加上default-storage_engine = engine_name选项,来设置mysql的默认存储引擎。
(2).通过配置文件设置默认存储引擎
也可以在my.ini或my.cnf等配置加上如下配置
[mysqld] default-storage_engine = engine_name;
这样,MySQL服务器启动时,会自动读取配置文件,来设置默认存储引擎。
在启动服务器后,如果要改变默认存储引擎,则可以通过以下四种方式
(3).查看当前会话默认存储引擎
SELECT @@SESSION.storage_engine;
(4).设置当前会话默认存储引擎
SET SESSION storage_engine = engine_name;
(5).查看全局默认存储引擎
SELECT @@GLOBAL.storage_engine;
(6).设置全局默认存储引擎
SET GLOBAL storage_engine = engine_name;
SESSION表示会话级,即该设置只对当前用户有效,而不会影响其他用户,GLOBAL表示全局级,如果改变则所有用户连接上MySQL服务器后的默认存储引擎都会使用GLOBAL storage_engine所设定的值,因此执行这个语句需要super权限。
3.创建数据表时,指定存储引擎。
存储引擎作用于数据表,因此,在创建建表时,可以指定数据库支持的任何存储引擎,如果在建表时CREATE语句没有使用engine=engine_name指定存储引擎,则该表使用默认存储引擎。
示例:创建名称为test的数据表,使用InnoDB存储引擎
CREATE TABLE test( id INT, name VARCHAR(20) )ENGINE = InnoDB;#指定InnoDB存储引擎
以上建表语句使用InnoDB存储引擎,因此,对该表的存储及查询均由InnoDB来实现。
4.查看数据表的存储引擎
在创建数据表时可以指定存储引擎,同样,可以通过创建语句查询某个数据表使用的存储引擎。
示例:查询数据表test使用的存储引擎
SHOW CREATE TABLE语句用于查询创建数据的SQL语句,通过建表语句,我们可以查询到数据表使用的存储引擎。
5.修改存储数据表存储引擎
在执行完建表语句之后,也可以通过ALTER语句进行修改。
ALTER TABLE test ENGINE MyISAM;