在mysql数据库中,mysql merge 表有点类似于视图。下面就让我们来一起了解一下mysql merge表都有哪些优点。
在mysql数据库中,mysql merge 表有点类似于视图。下面就让我们来一起了解一下mysql merge表都有哪些优点。
mysql merge表的优点:
a: 分离静态的和动态的数据
b:利用结构接近的的数据来优化查询
c: 查询时可以访问更少的数据
d:更容易维护大数据集
e: 可以通过修改.mrg文件来修改merge表,当然也可以用alter进行修改,修改后要通过flush tables刷新表缓存,此法可以动态增加减少子表
创建方法,,例:
mysql>create table t1(a int not null primary key)engine=myisam;
mysql>create table t2(a int not null primary key)engine=myisam;
mysql>create table mrg(a int not null primary key)engine=merge union=(t1,t2) insert_method=last;
下面添加测试数据
mysql>insert into t1(a) values(1),(2);
mysql>insert into t2(a)values(1),(2);
查询一下看看结果
mysql>select a from mrg;
结果会显示出t1,t2两个表中的数据
+------+
| a |
+------+
| 1|
| 2|
| 1|
| 2|
+------+
对于merge表,需要注意的是
1。每个子表的结构必须一致,主表和子表的结构需要一致,
2。每个子表的索引在merge表中都会存在,所以在merge表中不能根据该索引进行唯一性检索。
3 子表需要是myisam引擎
4 replace在merge表中不会工作
5 auto_increment 不会按照你所期望的方式工作。
创建mysql merge表的参数 insert_method有几个参数 。
last 如果你执行insert 指令来操作merge表时,插入操作会把数据添加到最后一个子表中。first 同理,执行插入数据时会把数据添加到第一个子表中。
比如本例,对merge表执行插入操作
mysql>insert into mrg(a)values(18);
查询一下
mysql>select a from t2;
结果你会发现18出现在t2表中。
---------------------------------------------------------------
如果你对mrg表或者子表进行了drop操作,那将有可能会产生些不可预知的情况。
如果删除mrg表,那么各个子表间将不会有联系。但是如果删除其中的任一子表,对于gnu/linux来说,merge表结构及数据仍然存在。
mysql>drop table t1,t2;
mysql>select a from mrg;
结果你会发现mrg表的查询结果不变。