MYSQL的MERGE存儲(chǔ)引擎
MYSQL的引擎不是一般的多,這次說到的是MERGE,這個(gè)引擎有很多特殊的地方:
MERGE引擎類型允許你把許多結(jié)構(gòu)相同的表合并為一個(gè)表。然后,你可以執(zhí)行查詢,從多個(gè)表返回的結(jié)果就像從一個(gè)表返回的結(jié)果一樣。每一個(gè)合并的表必須有同樣的表定義。
MERGE存儲(chǔ)引擎在下面這種使用場(chǎng)合會(huì)最為有用,如果需要把日志紀(jì)錄不停的錄入MySQL數(shù)據(jù)庫,并且每天、每周或者每個(gè)月都創(chuàng)建一個(gè)單一的表,而且要制作來自多個(gè)表的合計(jì)查詢,MERGE表這時(shí)會(huì)非常有效。然而,這項(xiàng)功能有局限性。你只能合并MyISAM表而且必須嚴(yán)格遵守相同的表定義的限制。雖然這看起來好像是一個(gè)大問題,但是,如果你使用另外一種表類型(例如InnoDB),這種合并可能就不需要了。
其創(chuàng)建方法如下:
他將多個(gè)表在邏輯上當(dāng)作一個(gè)表來查詢。他建立后有兩個(gè)文件,?
.frm 表結(jié)構(gòu)定義?
.mrg union表的名字清單
兩個(gè)基本表:?
CREATE TABLE TEST_MERGE_1(?
ID INT(5) NOT NULL,?
VALUE VARCHAR(100) NOT NULL,?
PRIMARY KEY(ID)?
) ENGINE=MyISAM DEFAULT CHARSET=utf8?
CREATE TABLE TEST_MERGE_2(?
ID INT(5) NOT NULL,?
VALUE VARCHAR(100) NOT NULL,?
PRIMARY KEY(ID)?
) ENGINE=MyISAM DEFAULT CHARSET=utf8
MERGE表的建立:?
CREATE TABLE TEST_MERGE(?
ID INT(5) NOT NULL,?
VALUE VARCHAR(100) NOT NULL,?
PRIMARY KEY(ID)?
) ENGINE=MRG_MyISAM DEFAULT CHARSET=utf8 INSERT_METHOD=LAST UNION=(TEST_MERGE_1,TEST_MERGE_2) ;
1. 此表類似于SQL中的union機(jī)制。?
2. 此表結(jié)構(gòu)必須與基本表完全一致,包括列名、順序。UNION表必須同屬一個(gè)DATABASE。?
3. 基本表類型必須是MyISAM。?
4. 可以通過修改.mrg文件來修改MERGE表,每個(gè)基本表的名字占一行。注意:修改后要通過FLUSH TABLES刷新表緩存。?
5. 對(duì)基本表的更改可以直接反映在此表上。?
6. INSERT_METHOD的取值可以是: 0 不允許插入 FIRST 插入到UNION中的第一個(gè)表 LAST 插入到UNION中的最后一個(gè)表。(4.0之后可用)?
7. 定義在它上面的約束沒有任何作用,約束是由基本表控制的,例如兩個(gè)基本表中存在著同樣的一個(gè)Key值,那么在MERGE表中會(huì)有兩個(gè)一樣的Key值。
?