基本表:
CREATE TABLE TEST_MERGE_1(
ID INT(5) NOT NULL,
VALUE VARCHAR(100) NOT NULL,
PRIMARY KEY(ID)
)TYPE=MyISAM;
CREATE TABLE TEST_MERGE_2(
ID INT(5) NOT NULL,
VALUE VARCHAR(100) NOT NULL,
PRIMARY KEY(ID))TYPE=MyISAM;
CREATE TABLE TEST_MERGE(
ID INT(5) NOT NULL,
VALUE VARCHAR(100) NOT NULL,
PRIMARY KEY(ID)
) TYPE=MRG_MyISAM INSERT_METHOD=LAST AUTO_INCREMENT=1 UNION=(TEST_MERGE_1,TEST_MERGE_2);
說明:
1. 此表結構必須與基本表徹底一致,包括列名、順序。UNION表必須同屬一個DATABASE。
2. 此表相似於SQL中的union機制。
3. 基本表類型必須是MyISAM的。
4. 能夠經過修改.mrg文件來修改MERGE表,每一個基本表的名字佔一行。注意:修改後要經過FLUSH TABLES刷新表緩存。
5. 對基本表的更改能夠直接反映在此表上。
6. INSERT_METHOD的取值能夠是: 0 不容許插入 FIRST 插入到UNION中的第一個表 LAST 插入到UNION中的最後一個表。(4.0以後可用)
7. 定義在它上面的約束沒有任何做用,約束是由基本表控制的,例如兩個基本表中存在着一樣的一個Key值,那麼在MERGE表中會有兩個同樣的Key值。
注意:
1.若是是經過修改.mrg文件的方式來修改MERGE表,那麼必定要修改後要經過FLUSH TABLES刷新表緩存,不然修改不會生效。最近犯過一次這樣的錯誤。
2.在數據量、查詢量較大的狀況下,不要試圖使用Merge表來達到相似於Oracle的表分區的功能,會很影響性能。個人感受是和union幾乎等價。
3.查詢結果及順序與建立Merge表時聯合表的順序有關。
假設有這樣兩條個語句:
INSERT INTO TEST_MERGE_1(ID,VALUE) VALUES(1,'ciray');
INSERT INTO TEST_MERGE_2(ID,VALUE) VALUES(1,'blog.csdn.net/ciray');
而後,這個查詢:
SELECT * FROM TEST_MERGE WHERE ID=1;
將 只會獲得一條記錄(1,'ciray'),並非兩條記錄,也不會是(1,'blog.csdn.net/ciray')。這是由於ID是 PRIMARY KEY,若是在第一個表中查詢到記錄,則不在後面的表中記錄查。若是ID並無定義惟一性約束,則這個查詢會獲得兩條記錄。