MERGE 儲存引擎

huzhichengforce發表於2015-02-28
merge 儲存引擎也被稱為MGR_MyISAM 儲存引擎,它實際上是將一組Myisam 表聚合在一起。使用時就像一張表
merge 儲存引擎所有的表必須擁有相同的表結構以下為例子
create table v1 (id int not null auto_increment primary key,v1 varchar(20)) engine=myisam;
create table v2 (id int not null auto_increment primary key,v1 varchar(20)) engine=myisam;
create table v3 (id int not null auto_increment primary key,v1 varchar(20)) engine=myisam;
create table v4 (id int not null auto_increment primary key,v1 varchar(20),v2 varchar(20)) engine=myisam;
insert into v1 (v1) values('this'),('is'),('mysql');
insert into v2 (v1) values('this'),('is'),('mysql');
insert into v3 (v1) values('this'),('is'),('mysql');
insert into v4 (v1) values('this'),('is'),('mysql');
----基於上面三張表建立merge 儲存引擎表
create table v_merge(id int not null auto_increment primary key,v1 varchar(20)) engine=merge union(v1,v2,v3);
create table t_merge(id int not null auto_increment primary key,v1 varchar(20)) engine=merge union(v1,v2,v4);
mysql> select * from v_merge;
+----+-------+
| id | v1    |
+----+-------+
|  1 | this  |
|  2 | is    |
|  3 | mysql |
|  1 | this  |
|  2 | is    |
|  3 | mysql |
|  1 | this  |
|  2 | is    |
|  3 | mysql |
+----+-------+
9 rows in set (0.00 sec)

mysql> select * from t_merge;
ERROR 1168 (HY000): Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist

每個merge引擎除了擁有儲存表結構定義的.frm 檔案外 還有 一個副檔名稱為.mgr的檔案。
。mgr 檔案不儲存資料而是儲存資料的來源地

另外MERGE引擎表本身也不儲存資料
預設情況下merger 是不允許insert ,delete ,update  的。
但是通過設定引數(insert_method)是可以完成這些操作

mysql>alter table v_merge insert_method=firse

第二步實驗 delete


在merge 表中新增表
create table v5 (id int not null auto_increment primary key,v1 varchar(20)) engine=myisam;
insert into v5 (v1) values('that'),('is'),('mine');
alter table v_merge union(v1,v2,v3,v5)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26764973/viewspace-1443623/,如需轉載,請註明出處,否則將追究法律責任。

相關文章