MERGE存儲引擎,也被認識為MRG_MyISAM引擎,是一個相同的可以被當作一個來用的MyISAM表的集合。“相同”意味著所有表同樣的列和索引信息。你不能合并列被以不同順序列于其中的表,沒有恰好同樣列的表,或有不同順序索引的表。而且,任何或者所有的表可以用myisampack來壓縮的.
當你創建一個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 t1 (
- -> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
- -> message CHAR(20));
- mysql> CREATE TABLE t2 (
- -> a INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
- -> message CHAR(20));
- mysql> INSERT INTO t1 (message) VALUES ('Testing'),('table'),('t1');
- mysql> INSERT INTO t2 (message) VALUES ('Testing'),('table'),('t2');
- mysql> CREATE TABLE total (
- -> a INT NOT NULL AUTO_INCREMENT,
- -> message CHAR(20), INDEX(a))
- -> TYPE=MERGE UNION=(t1,t2) INSERT_METHOD=LAST;
復制代碼
注意,一個列在MERGEN表中被索引,但沒有被宣告為一個PRIMARY KEY,因為它是在更重要的MyISAM表中。這是必要的,因為MERGE表在更重要的表中的設置上強制非唯一性。
創建MERGE表之后,你可以發出把一組表當作一體來操作的查詢:
- mysql> SELECT * FROM total;
- +---+---------+
- | a | message |
- +---+---------+
- | 1 | Testing |
- | 2 | table |
- | 3 | t1 |
- | 1 | Testing |
- | 2 | table |
- | 3 | t2 |
復制代碼
[ 本帖最后由 forest 于 2007-4-5 18:04 編輯 ]
成功就是成為最好的你自己!