MEMORY存储引擎:
(system@localhost) [mysql]> create table t_mem1(id int) engine=memory;
MEMORY存储引擎的表只拥有一个独立的磁盘文件,扩展名为.frm,用来存储表结构的定义。
MEMORY引擎表能够使用的最大内存空间不超过max_heap_table_size系统变量设定的值,该变量默认情况下是16MB。
CSV存储引擎:
(system@localhost) [mysql]> create table t_csv1(id int not null default 0,v1 varchar(20) not null default '') engine=csv;
(system@localhost) [mysql]> insert into t_csv1 values (1,'a');
(system@localhost) [mysql]> insert into t_csv1 values (2,'b');
CSV存储引擎因为自身文件格式的原因,所有列必须强制指定not null,另外CSV引擎也不支持索引和分区。CSV引擎表也会包含一个表的结构定义文件,扩展名为.frm,还会创建一个扩展名为.CSV的数据文件。还有一个同名的元信息文件,扩展名为.CSM,用来保存表的状态及表中保存的数据量。可以使用CHECK TABLE或REPAIR TABLE命令进行检查和修复。CHECK语句会检查CSV文件中分隔符是否合法,分隔列的数量与表定义中是否相同。发现不合法的行,就会抛出错误。用REPAIR语句执行修复时,会尝试从当前CSV中复制合法数据,清除不合法的数据。需要注意,修复时只要发现文件中有损坏的记录行,那么之后的数据也就全部丢失,不管这中间是否会有合法的数据
[root@mysql1 mysql]# ls -l t_*
-rw-rw----. 1 mysql mysql 35 Jul 4 09:14 t_csv1.CSM
-rw-rw----. 1 mysql mysql 12 Jul 4 09:14 t_csv1.CSV
-rw-rw----. 1 mysql mysql 8582 Jul 4 09:13 t_csv1.frm
ARCHIVE存储引擎:
ARCHIVE存储引擎使用的场景是归档,仅能支持insert和select语句。除了拥有标准的.frm结构定义文件外,还有一个扩展名为.arz的数据文件,执行优化操作时可能还会出现一个扩展名为.arn的文件。为什么需要ARCHIVE存储引擎?因为基于这种存储引擎的对象,能够将大量数据压缩存储,插入的列会被压缩,ARCHIVE引擎使用zlib无损数据压缩算法
(system@localhost) [mysql]> create table t_arch1 engine=archive as select table_catalog,table_name,column_name from information_schema.columns;
(system@localhost) [mysql]> insert into t_arch1 select * from t_arch1;
(system@localhost) [mysql]> show table status like 't_arch1';
BLACKHOLE存储引擎:
所有插入的数据都不会保存,BLACKHOLE引擎表永远保持为空。对应的物理文件只有.frm文件,只有表结构定义
MERGE存储引擎:
MERGE存储引擎实际上是将一组MyISAM表聚合在一起
(system@localhost) [mysql]> create table t_mys1 (id int not null auto_increment primary key,v1 varchar(20)) engine=myisam;
(system@localhost) [mysql]> create table t_mys2 (id int not null auto_increment primary key,v1 varchar(20)) engine=myisam;
(system@localhost) [mysql]> insert into t_mys1 (v1) values ('this'),('is'),('mys1');
(system@localhost) [mysql]> insert into t_mys2 (v1) values ('this'),('is'),('mys2');
(system@localhost) [mysql]> create table t_mer1 (id int not null auto_increment primary key,v1 varchar(20)) engine=merge union=(t_mys1,t_mys2);
(system@localhost) [mysql]> select * from t_mer1;
除了拥有存储表结构定义的.frm文件以外,还有一个扩展名为.mgr的文件。这个文件不保存数据,而是数据的来源地,即引用的MyISAM引擎表的列表。MERGE引擎表本身并不存储数据,它只起一个汇总作用。
FEDERATED存储引擎:
要访问远端的MySQL数据库实例中的对象,通过FEDERATED存储引擎实现。默认MySQL不支持该存储引擎,编译时需要执行CMake时附加-DWITH_FEDERATED_STORAGE_ENGINE选项,编辑/data/mysqldata/3306/my.cnf在[mysqld]区块中增加一行federated,重启mysql。
每个FEDERATED引擎都包括两个元素:
一个远端的MySQL数据库表,可以是目标端支持的任意类型的表
一个是本地的数据库表,该表结构应与目标端的表完全相同,本地只有.frm文件,不会保存具体的数据,另外表的定义信息中还会包括到目标端的连接信息
客户端访问FEDERATED表时,按照下列方式执行:
存储引擎检查FEDERATED表列以及关联的目标端对象的SQL语句
使用MySQL客户端API发送语句到远程端
远程端处理完语句,由本地端接收该语句生成的结果集
返回结果集,转换成FEDERATED引擎形式,返回给客户端
FEDERATED存储引擎支持SELECT、INSERT、UPDATE、DELETE、TRUNCATE TABLE及索引,操作本地的表实际上都是要将数据发送至远端
远端表结构:
CREATE TABLE poll_vote(id int(10) not null auto_increment,
parent_id it(10) not null,
vote_count int(10) default 0,
vote_month int (10) not null,
primary key(id)) engine=InnoDB auto_increment=26020 default charset=utf8;
使用CONNECTION子句创建FEDERATED表
CREATE TABLE poll_vote(id int(10) not null auto_increment,
parent_id it(10) not null,
vote_count int(10) default 0,
vote_month int (10) not null,
primary key(id)) engine=FEDERATED auto_increment=26020 default charset=utf8
connection=’mysql://hugc:[email protected]/hddoc/poll_vote’;
格式如下:
schema://user_name:password@hostname:prot/db_name/tbl_name
schema目前只支持mysql
使用CREATE SERVER创建FEDERATED表
CREATE SERVER hddoc110
FOREIGN DATA WRAPPER mysql
OPTIONS (USER ‘hugc’,PASSWORD ‘hugc’,HOST ‘192.168.1.202’,PORT 3306,DATABASE ‘hddoc’);
CREATE TABLE poll_vote(id int(10) not null auto_increment,
parent_id it(10) not null,
vote_count int(10) default 0,
vote_month int (10) not null,
primary key(id)) engine=FEDERATED auto_increment=26020 default charset=utf8
connection=’hddoc110/poll_vote’;