【Mysql學習】MERGE儲存引擎(一)
MERGE儲存引擎(一)
MERGE表的問題
MERGE儲存引擎,也被認識為MRG_MyISAM引擎,是一個相同的可以被當作一個來用的MyISAM表的集合。“相同”意味著所有表同樣的列和索引資訊。你不能合併列被以不同順序列於其中的表,沒有恰好同樣列的表,或有不同順序索引的表。而且,任何或者所有的表可以用myisampack來壓縮。表選項的差異,比如AVG_ROW_LENGTH, MAX_ROWS或PACK_KEYS都不重要。
當你建立一個MERGE表之時,MySQL在磁碟上建立兩個檔案。檔名以表的名字開始,並且有一個副檔名來指明檔案型別。一個.frm檔案儲存表定義,一個.MRG檔案包含被當作一個來用的表的名字。這些表作為MERGE表自身,不必要在同一個資料庫中。
你可以對錶的集合用SELECT, DELETE, UPDATE和INSERT。你必須對你對映到一個MERGE表的這些表有SELECT, UPDATE和DELETE 的許可權。
如果你DROP MERGE表,你僅在移除MERGE規格。底層表沒有受影響。
當你建立一個MERGE表之時,你必須指定一個UNION=(list-of-tables)子句,它說明你要把哪些表當作一個來用。如果你想要對MERGE表的插入發生在UNION列表中的第一個或最後一個表上,你可以選擇地指定一個INSERT_METHOD選項。使用FIRST或LAST值使得插入被相應地做在第一或最後一個表上。如果你沒有指定INSERT_METHOD選項,或你用一個NO值指定該選項。往MERGE表插入記錄的試圖導致錯誤。
下面例子說明如何建立一個MERGE表:
mysql> create table pay_2009 (
-> id int,
-> pay_date datetime,
-> amount decimal(15,3),
-> key idx_fk_id(id)
-> ) engine=myisam;
Query OK, 0 rows affected (0.06 sec)
mysql> create table pay_2010 (
-> id int,
-> pay_date datetime,
-> amount decimal(15,3),
-> key idx_fk_id(id)
-> ) engine=myisam;
Query OK, 0 rows affected (0.13 sec)
mysql> create table pay_all (
-> id int,
-> pay_date datetime,
-> amount decimal(15,3),
-> index (id)
-> ) engine=merge union=(pay_2009,pay_2010) insert_method=first;
Query OK, 0 rows affected (0.09 sec)
mysql> insert into pay_2009 values(1,`2009-09-27`,10000),(2,`2009-09-17`,20000);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> insert into pay_2010 values(1,`2010-09-27`,10000),(2,`2010-09-17`,20000);
Query OK, 2 rows affected (0.02 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql>
注意,一個列在MERGEN表中被索引,但沒有被宣告為一個PRIMARY KEY,因為它是在更重要的MyISAM表中。這是必要的,因為MERGE表在更重要的表中的設定上強制非唯一性。
建立MERGE表之後,你可以發出把一組表當作一體來操作的查詢:
mysql> select * from pay_2009;
+——+———————+———–+
| id | pay_date | amount |
+——+———————+———–+
| 1 | 2009-09-27 00:00:00 | 10000.000 |
| 2 | 2009-09-17 00:00:00 | 20000.000 |
+——+———————+———–+
2 rows in set (0.00 sec)
mysql> select * from pay_2010;
+——+———————+———–+
| id | pay_date | amount |
+——+———————+———–+
| 1 | 2010-09-27 00:00:00 | 10000.000 |
| 2 | 2010-09-17 00:00:00 | 20000.000 |
+——+———————+———–+
2 rows in set (0.00 sec)
mysql> select * from pay_all;
+——+———————+———–+
| id | pay_date | amount |
+——+———————+———–+
| 1 | 2009-09-27 00:00:00 | 10000.000 |
| 2 | 2009-09-17 00:00:00 | 20000.000 |
| 1 | 2010-09-27 00:00:00 | 10000.000 |
| 2 | 2010-09-17 00:00:00 | 20000.000 |
+——+———————+———–+
4 rows in set (0.00 sec)
mysql> insert into pay_all values(3,`2009-12-02`,80000);
Query OK, 1 row affected (0.00 sec)
mysql> select * from pay_2009;
+——+———————+———–+
| id | pay_date | amount |
+——+———————+———–+
| 1 | 2009-09-27 00:00:00 | 10000.000 |
| 2 | 2009-09-17 00:00:00 | 20000.000 |
| 3 | 2009-12-02 00:00:00 | 80000.000 |
+——+———————+———–+
3 rows in set (0.00 sec)
mysql> select * from pay_2010;
+——+———————+———–+
| id | pay_date | amount |
+——+———————+———–+
| 1 | 2010-09-27 00:00:00 | 10000.000 |
| 2 | 2010-09-17 00:00:00 | 20000.000 |
+——+———————+———–+
2 rows in set (0.00 sec)
mysql> select * from pay_all;
+——+———————+———–+
| id | pay_date | amount |
+——+———————+———–+
| 1 | 2009-09-27 00:00:00 | 10000.000 |
| 2 | 2009-09-17 00:00:00 | 20000.000 |
| 3 | 2009-12-02 00:00:00 | 80000.000 |
| 1 | 2010-09-27 00:00:00 | 10000.000 |
| 2 | 2010-09-17 00:00:00 | 20000.000 |
+——+———————+———–+
5 rows in set (0.00 sec)
注意,你也可以直接從MySQL之外直接操作.MRG檔案:
相關文章
- mysql dba系統學習(20)mysql儲存引擎MyISAMMySql儲存引擎
- 重新學習Mysql資料庫3:Mysql儲存引擎與資料儲存原理MySql資料庫儲存引擎
- MySQL儲存引擎MySql儲存引擎
- MySQL 儲存引擎MySql儲存引擎
- 聊一聊MySQL的儲存引擎MySql儲存引擎
- MySQL InnoDB儲存引擎MySql儲存引擎
- MySQL系列-儲存引擎MySql儲存引擎
- MYSQL排錯指南學習筆記(一)排查及儲存引擎修復MySql筆記儲存引擎
- mysql常用儲存引擎(InnoDB、MyISAM、MEMORY、MERGE、ARCHIVE)介紹與如何選擇MySql儲存引擎Hive
- MySQL-05.儲存引擎MySql儲存引擎
- MySQL入門--儲存引擎MySql儲存引擎
- 理解mysql的儲存引擎MySql儲存引擎
- MySQL之四 儲存引擎MySql儲存引擎
- 一文徹底弄懂MySQL的各個儲存引擎,InnoDB、MyISAM、Memory、CSV、Archive、Merge、Federated、NDBMySql儲存引擎Hive
- MySQL federated儲存引擎測試MySql儲存引擎
- 2_mysql(索引、儲存引擎)MySql索引儲存引擎
- MySQL InnoDB 儲存引擎探祕MySql儲存引擎
- mysql學習6:第三章MYSQL 體系結構與儲存引擎MySql儲存引擎
- openGauss儲存技術(一)——行儲存引擎儲存引擎
- 簡單認識MySQL儲存引擎MySql儲存引擎
- MySQL索引、事務與儲存引擎MySql索引儲存引擎
- MySQL儲存引擎入門介紹MySql儲存引擎
- MySQL資料庫操作、儲存引擎MySql資料庫儲存引擎
- 如何選擇mysql的儲存引擎MySql儲存引擎
- 小談mysql儲存引擎優化MySql儲存引擎優化
- 【MySQL】MySQL(四)儲存引擎、索引、鎖、叢集MySql儲存引擎索引
- Mysql 5.7儲存過程的學習MySql儲存過程
- 怎麼檢視mysql的儲存引擎MySql儲存引擎
- 《MySQL 效能優化》之 InnoDB 儲存引擎MySql優化儲存引擎
- Mysql之儲存引擎及字符集MySql儲存引擎
- [Mysql技術內幕]Innodb儲存引擎MySql儲存引擎
- MySQL InnoDB儲存引擎體系結構MySql儲存引擎
- MySQL體系結構與儲存引擎MySql儲存引擎
- MySQL資料庫儲存引擎簡介MySql資料庫儲存引擎
- MySQL儲存引擎--MyISAM與InnoDB區別MySql儲存引擎
- 儲存引擎儲存引擎
- 儲存學習
- MySQL儲存引擎:MyISAM和InnoDB的區別MySql儲存引擎
- MySQLInnoDB儲存引擎(一):精談innodb的儲存結構MySql儲存引擎