对于多个表,我们常常需要联合查询,那么使用 merge 表就会非常有效
MERGE存储引擎把一组MyISAM数据表当做一个逻辑单元来对待,让我们可以同时对他们进行查询需要注意的是,只有 MyISAM 引擎才支持 MERGE 表的特性
merge 表的创建
例如有下面两个表:
CREATE TABLE `t1` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`log` varchar(45) ,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
CREATE TABLE `t2`(
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`log` varchar(45) ,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
无论表中是否已有数据,我们都可以创建 MERGE 表:
CREATE TABLE `t` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`log` varchar(45) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MERGE UNION=(t1, t2) INSERT_METHOD=LAST;
上述创建语句中,UNION 说明了 MERGE 表是哪几个表的联合
INSERT_METHOD 说明了 MERGE 表的插入方式,可以取以下值:MERGE 表 INSERT_METHOD 取值取值意义
0不允许插入
FIRST新数据插入到 UNION 中的第一个表
LAST新数据插入到 UNION 中的最后一个表
可以通过 alter table 的方式修改上述设定
alter table t ENGINE=MERGE UNION=(t1,t2,t3) INSERT_METHOD=FIRST;
MERGE 表的查询
当我们执行:
select * from t;
从效果上看,和执行:
(select * from t1) union
(select * from t2)
是一样的
MERGE 表的删除
删除 MERGE 表不会对子表造成任何影响
如果要删除子表,则必须首先使用 alter table 语句将子表从 MERGE 表中的 UNION 中去除,然后才可以删除子表