您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
三六零分类信息网 > 莆田分类信息网,免费分类信息发布

mysql中merge表存储引擎用法介绍

2025/11/8 22:46:59发布11次查看
mysql中merge表存储引擎用法介绍: mysql的merge引擎类型允许你把许多结构相同的表合并为一个表。然后,你可以执行查询,从多个表返回的结果就像从一个表返回的结果一样。每一个合并的表必须有同样表的定义和结构。 merge表存储引擎在如下这种使用场合会最为
mysql中merge表存储引擎用法介绍:
mysql的merge引擎类型允许你把许多结构相同的表合并为一个表。然后,你可以执行查询,从多个表返回的结果就像从一个表返回的结果一样。每一个合并的表必须有同样表的定义和结构。
merge表存储引擎在如下这种使用场合会最为有用:
如果需要把日志纪录不停的录入mysql数据库,并且每天、每周或者每个月都创建一个单一的表,而且要制作来自多个表的合计查询,merge表这时会非常有效。然而,这项功能有局限性。你只能合并myisam表而且必须严格遵守相同的表定义的限制。虽然这看起来好像是一个大问题,但是,如果你使用另外一种表类型(例如innodb),这种合并可能就不需要.
下面定义如下几个表:
基本表:
create table test_merge_1(
id int(5) not null,
value varchar(100) not null,
primary key(id)
);
create table test_merge_2(
id int(5) not null,
value varchar(100) not null,
primary key(id)
);
merge表:
create table test_merge(
id int(5) not null,
value varchar(100) not null,
primary key(id)
) type=mrg_myisam insert_method=last union=(test_merge_1,test_merge_2);
说明:
1. 此表结构必须与基本表完全一致,包括列名、顺序。union表必须同属一个database。
2. 此表类似于sql中的union机制。
3. 基本表类型必须是myisam的。
4. 可以通过修改.mrg文件来修改merge表,每个基本表的名字占一行。注意:修改后要通过flush tables刷新表缓存。
5. 对基本表的更改可以直接反映在此表上。
6. insert_method的取值可以是: 0 不允许插入 first 插入到union中的第一个表 last 插入到union中的最后一个表。(4.0之后可用)
7. 定义在它上面的约束没有任何作用,约束是由基本表控制的,例如两个基本表中存在着同样的一个key值,那么在merge表中会有两个一样的key值。
注意:
1.如果是通过修改.mrg文件的方式来修改merge表,那么一定要修改后要通过flush tables刷新表缓存,否则修改不会生效。最近犯过一次这样的错误。
2.在数据量、查询量较大的情况下,不要试图使用merge表来达到类似于oracle的表分区的功能,会很影响性能。我的感觉是和union几乎等价。
3.查询结果及顺序与创建merge表时联合表的顺序有关。
假设有这样两条个语句:
insert into test_merge_1(id,value) values(1,’php自学网′);
insert into test_merge_2(id,value) values(1,’http://www.phpzixue.cn′);
然后,这个查询:
select * from test_merge where id=1;
将只会得到一条记录(1,’php自学网′),并不是两条记录,也不会是(1,’http://www.phpzixue.cn′)。这是因为id是primary key,如果在第一个表中查询到记录,则不在后面的表中记录查。如果id并没有定义唯一性约束,则这个查询会得到两条记录。
学习记录如下:
 create table test_merge_1( id int(5) not null, value varchar(100) not null, primary key(id) )
 engine=myisam;
 create table test_merge_2( id int(5) not null, value varchar(100) not null, primary key(id) )
 engine=myisam;
 create table test_merge( id int(5) not null, value varchar(100) not null, primary key(id) ) 
 engine=merge union=(test_merge_1,test_merge_2) insert_method=last;
insert into test_merge_1(id,value) values(1,'php自学网');
insert into test_merge_2(id,value) values(1,'http://www.phpzixue.cn');
select * from test_merge;
select * from test_merge where id=1;
drop table test_merge,test_merge_1,test_merge_2;
莆田分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product