Mysqlのストレージエンジンの:MERGEストレージエンジン


MergeはMyISAMストレージエンジンに基づくテーブルなので、MergeストレージエンジンはMGR_とも呼ばれますMyISAMストレージエンジンは、MyISAMストレージエンジンのテーブルのセットを1枚のテーブルに集約する役割を果たします.
 
Mergeで集約するMyISAMテーブルのカラムとインデックスは、同じ定義と順序でなければなりません.
 
MERGEストレージエンジンのテーブルの作成
MyISAMストレージエンジンに基づく2つのテーブルtable_を作成myisam1、tabl_myisam2:
 

mysql> create table table_myisam1(id intprimary key, name varchar(20)) engine=myisam;
Query OK, 0 rows affected (0.04 sec)

mysql> create table table_myisam2(id intprimary key, name varchar(20)) engine=myisam;
Query OK, 0 rows affected (0.01 sec)

mysql> insert into table_myisam1 values(1,'myisam1');
Query OK, 1 rows affected (0.00 sec)
Records: 1 Duplicates: 0  Warnings: 0

mysql> insert into table_myisam2 values(1,' myisam2');
Query OK, 1 rows affected (0.00 sec)
Records: 1 Duplicates: 0  Warnings: 0

 

 

 

MERGE table_merge, table_myisam1、tabl_myisam2 :

 


mysql> create table table_merge(id intprimary key, name varchar(20)) engine=merge union(table_myisam1,table_myisam2);
Query OK, 0 rows affected (0.05 sec)

 

 

 

table_merge ( table_myisam1、tabl_myisam2 ):

 


mysql> select * from table_merge;
+----+---------+
| id | name    |
+----+---------+
|  1| myisam1 |
|  1| myisam2 |
+----+---------+
2 rows in set (0.00 sec)

 

, Merge ID , 。。。

 

table_merge :

. MRG , ; .frm

 


[mysql@localhost test]$ ll table_merge.*
-rw-rw---- 1 mysql mysql 8586 Sep  2 16:02 table_merge.frm
-rw-rw---- 1 mysql mysql   28 Sep 2 16:02 table_merge.MRG

 

 

 

.MRG ( ):

 


[mysql@localhost test]$ more table_merge.MRG
table_myisam1
table_myisam2

 

MERGEMyISAM

 

 

MERGE

Merge :

1: MyISAM

2: Merge

 

MyISAM , Merge

table_myisam1 :

 


mysql> insert into table_myisam1 values(2,'new_myisam1');
Query OK, 1 row affected (0.00 sec)

 

 

 

table_merge :

 


mysql> select * from table_merge;
+----+-------------+
| id | name        |
+----+-------------+
|  2| new_myisam1 |
|  1| myisam1     |
|  1| myisam2     |
+----+-------------+
3 rows in set (0.00 sec)

 

MERGE

 

MERGE , :insert_method

insert_method :

1:first

2:last

3:no ( )

 

MERGE

 


mysql> alter table table_merge insert_method=last;
Query OK, 0 rows affected (0.06 sec)
Records: 0 Duplicates: 0  Warnings: 0

mysql> insert into table_merge values(2,'new_myisam2');
Query OK, 1 row affected (0.00 sec)

 

 

 

MERGE table_merge:

 


mysql> select * from table_merge;
+----+-------------+
| id | name        |
+----+-------------+
|  2| new_myisam1 |
|  1| myisam1     |
|  2| new_myisam2 |
|  1| myisam2     |
+----+-------------+
4 rows in set (0.00 sec)

 

 

 

MERGE MyISAM table_myisam2:

 


mysql> select * from table_myisam2;
+----+-------------+
| id | name        |
+----+-------------+
|  2| new_myisam2 |
|  1| myisam2     |
+----+-------------+
2 rows in set (0.00 sec)

 

 

MERGE DROP

 

Merge Drop

Merge MyISAM , drop Merge , drop Merge , MyISAM , MyISAM 。

 

drop Merge table_merge_drop:

 


mysql> create table table_merge_drop(id int primary key, name varchar(20)) engine=merge union(table_myisam1,table_myisam2);
Query OK, 0 rows affected (0.03 sec)

mysql> select * from table_merge_drop;
+----+-------------+
| id | name        |
+----+-------------+
|  2| new_myisam1 |
|  1| myisam1     |
|  2| new_myisam2 |
|  1| myisam2     |
+----+-------------+
4 rows in set (0.00 sec)

 

 

 

Drop Merge table_merge_drop:

 


mysql> drop table table_merge_drop;
Query OK, 0 rows affected (0.00 sec)

 

 

 

MyISAM , :

 


mysql> select * from table_myisam1;
+----+-------------+
| id | name        |
+----+-------------+
|  2| new_myisam1 |
|  1| myisam1     |
+----+-------------+
2 rows in set (0.00 sec)

mysql> select * from table_myisam2;
+----+-------------+
| id | name        |
+----+-------------+
|  2| new_myisam2 |
|  1| myisam2     |
+----+-------------+
2 rows in set (0.00 sec)

 

Merge MyISAM Drop

 

Merge MyISAM , Merge , union

 

Merge MyISAM table_myisam2:

 


mysql> drop table table_myisam2;
Query OK, 0 rows affected (0.00 sec)

 

Merge :

 


mysql> select * from table_merge;
ERROR 1168 (HY000): Unable to openunderlying table which is differently defined or of non-MyISAM type or doesn'texist

 

 

 

Merger union , table_myisam1 MyISAM

 


mysql> alter table table_merge engine=merge union(table_myisam1) ;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0  Warnings: 0

 

 

 

Merge , :

 


mysql> select * from table_merge;
+----+-------------+
| id | name        |
+----+-------------+
|  2| new_myisam1 |
|  1| myisam1     |
+----+-------------+
2 rows in set (0.00 sec)