MySQL-MERGE存儲引擎的使用測試



MERGE 存儲引擎,主要用於合併多張表結構相同的 MyISAM 表數據(類似union all,不是union,因爲數據不會去重),merge 表實際不存儲數據。實踐記錄如下:

1、創建三張相同表結構的  MyISAM 表:payment_2006、payment_2007、payment_2008:

create table payment_2006
(
  country_id smallint,
  payment_date datetime,
  amount decimal(15,2),
  key idx_fk_country_id(country_id)
) engine=myisam;


create table payment_2007
(
  country_id smallint,
  payment_date datetime,
  amount decimal(15,2),
  key idx_fk_country_id(country_id)
) engine=myisam;


create table payment_2008
(
  country_id smallint,
  payment_date datetime,
  amount decimal(15,2),
  key idx_fk_country_id(country_id)
) engine=myisam;



2、分別向 payment_2006 、 payment_2007 、payment_2008表中插入測試數據: 

insert into payment_2006 values(1,'2006-05-01',100000),(2,'2006-08-15',150000); 

insert into payment_2007 values(1,'2007-02-20',35000),(2,'2007-07-15',220000); 

insert into payment_2008 values(1,'2008-08-08',18000),(2,'2008-03-15',380000); 


3、分別查看這三表張的記錄:

mysql> select * from payment_2006;

+------------+---------------------+-----------+
| country_id | payment_date        | amount    |
+------------+---------------------+-----------+
|          1 | 2006-05-01 00:00:00 | 100000.00 |
|          2 | 2006-08-15 00:00:00 | 150000.00 |
+------------+---------------------+-----------+
2 rows in set (0.01 sec)


mysql> select * from payment_2007;
+------------+---------------------+-----------+
| country_id | payment_date        | amount    |
+------------+---------------------+-----------+
|          1 | 2007-02-20 00:00:00 |  35000.00 |
|          2 | 2007-07-15 00:00:00 | 220000.00 |
+------------+---------------------+-----------+
2 rows in set (0.00 sec)


mysql> select * from payment_2008;
+------------+---------------------+-----------+
| country_id | payment_date        | amount    |
+------------+---------------------+-----------+
|          1 | 2008-08-08 00:00:00 |  18000.00 |
|          2 | 2008-03-15 00:00:00 | 380000.00 |
+------------+---------------------+-----------+
2 rows in set (0.00 sec)


4、創建 merge 引擎類型的 payment_all 表:

CREATE TABLE payment_all(
country_id smallint,
payment_date datetime,
amount DECIMAL(15,2),
INDEX(country_id)
)engine=merge union=(payment_2008,payment_2006,payment_2007) INSERT_METHOD=FIRST;

說明: union指定要合併的 MyISAM表;INSERT_METHOD表示當向這個merge引擎類型的payment_all 表插入數據時,數據是插入到union參數指定的哪張表(FIRST:表示插入到第一張表,LAST:表示插入到最後一張表)。


5、查看merge引擎類型 payment_all 虛擬合併表的結果:

mysql> select * from payment_all;
+------------+---------------------+-----------+
| country_id | payment_date        | amount    |
+------------+---------------------+-----------+
|          1 | 2008-08-08 00:00:00 |  18000.00 |        
|          2 | 2008-03-15 00:00:00 | 380000.00 |

|          1 | 2006-05-01 00:00:00 | 100000.00 |
|          2 | 2006-08-15 00:00:00 | 150000.00 |
|          1 | 2007-02-20 00:00:00 |  35000.00 |
|          2 | 2007-07-15 00:00:00 | 220000.00 |
+------------+---------------------+-----------+

說明:因爲在創建 payment_all時,union參數指定的第一張表是 payment_2008,所以先顯示payment_2008表的數據。 


6、向merge引擎類型 payment_all 虛擬合併表插入數據:

insert into payment_all values(3,'2006-01-01',9999);


7、檢查插入的數據:

mysql> select * from payment_all;
+------------+---------------------+-----------+
| country_id | payment_date        | amount    |
+------------+---------------------+-----------+
|          1 | 2008-08-08 00:00:00 |  18000.00 |
|          2 | 2008-03-15 00:00:00 | 380000.00 |
|          3 | 2006-01-01 00:00:00 |   9999.00 |
|          1 | 2006-05-01 00:00:00 | 100000.00 |
|          2 | 2006-08-15 00:00:00 | 150000.00 |
|          1 | 2007-02-20 00:00:00 |  35000.00 |
|          2 | 2007-07-15 00:00:00 | 220000.00 |
+------------+---------------------+-----------+
7 rows in set (0.00 sec)


mysql> select * from payment_2008;
+------------+---------------------+-----------+
| country_id | payment_date        | amount    |
+------------+---------------------+-----------+
|          1 | 2008-08-08 00:00:00 |  18000.00 |
|          2 | 2008-03-15 00:00:00 | 380000.00 |
|          3 | 2006-01-01 00:00:00 |   9999.00 |
+------------+---------------------+-----------+

看到,數據已經插入到了 創建 payment_all 表時union參數指定的第一張表 payment_2008中,因爲創建 payment_all 表時,INSERT_METHOD=FIRST。

(完)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章