《Mysql學(xué)習(xí)MySQLMerge存儲(chǔ)引擎》要點(diǎn):
本文介紹了Mysql學(xué)習(xí)MySQLMerge存儲(chǔ)引擎,希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
MYSQL實(shí)例MERGE存儲(chǔ)引擎把一組MyISAM數(shù)據(jù)表當(dāng)做一個(gè)邏輯單元來(lái)對(duì)待,讓我們可以同時(shí)對(duì)他們進(jìn)行查詢.構(gòu)成一個(gè)MERGE數(shù)據(jù)表結(jié)構(gòu)的各成員MyISAM數(shù)據(jù)表必須具有完全一樣的結(jié)構(gòu).每一個(gè)成員數(shù)據(jù)表的數(shù)據(jù)列必須依照同樣的順序定義同樣的名字和類型,索引也必須依照同樣的順序和同樣的方式定義.
MYSQL實(shí)例Merge存儲(chǔ)引擎允許將一組使用MyISAM存儲(chǔ)引擎的并且表結(jié)構(gòu)相同(即每張表的字段順序、字段名稱、字段類型、索引定義的順序及其定義的方式必須相同)的數(shù)據(jù)表合并為一個(gè)表,方便了數(shù)據(jù)的查詢.
MYSQL實(shí)例假設(shè)有l(wèi)og_2004、log_2005、log_2006、log_2007 這四張日志記錄表,其數(shù)據(jù)分別是每一年的數(shù)據(jù),表結(jié)構(gòu)如下(YY代表年份):
MYSQL實(shí)例
CREATE TABLE log_YY (
dt DATETIME NOT NULL,
info VARCHAR(100) NOT NULL,
INDEX (dt)
) ENGINE = MyISAM;
MYSQL實(shí)例可以通過(guò)如下SQL語(yǔ)句把這些表歸攏為一個(gè)邏輯單元:
MYSQL實(shí)例
CREATE TABLE log_merge(
dt DATETIME NOT NULL,
info VARCHAR(100) NOT NULL,
INDEX(dt)
) ENGINE = MERGE UNION = (log_2004, log_2005, log_2006, log_2007);
MYSQL實(shí)例說(shuō)明:ENGINE選項(xiàng)的值必須是MERGE;UNION選項(xiàng)列出了將被收錄在這個(gè)log_merge數(shù)據(jù)表的所有表.該log_merge表創(chuàng)建成功后,就可以像普通表那樣查詢它,只是每一次查詢都將同時(shí)作用于構(gòu)成它的每一個(gè)成員數(shù)據(jù)表 .譬如查詢這些日志數(shù)據(jù)表的數(shù)據(jù)行總數(shù):
MYSQL實(shí)例
SELECT COUNT(*) FROM log_merge;
MYSQL實(shí)例譬如查詢每年各有多少日志記錄:
MYSQL實(shí)例
SELECT YEAR(dt) AS y, COUNT(*) AS entries FROM log_merge GROUP BY y;
MYSQL實(shí)例創(chuàng)建MERGE存儲(chǔ)引擎的表也支持DELETE 和UPDATE操作.INSERT操作比較麻煩,因?yàn)镸ySQL需要知道應(yīng)該把新數(shù)據(jù)行插入到哪一個(gè)成員表里去.在MERGE存儲(chǔ)引擎數(shù)據(jù)表的定義里可以包括一個(gè)INSERT_METHOD選項(xiàng)(MySQL4.0之后支持),這個(gè)選項(xiàng)的值有NO、FIRST、LAST三個(gè),其含義依次是禁止INSERT操作、將數(shù)據(jù)行插入到UNION中的第一個(gè)表或?qū)?shù)據(jù)行插入到UNION中的最后一個(gè)表.比如下面SQL語(yǔ)句指定將新數(shù)據(jù)添加到log_2007數(shù)據(jù)表----它是UNION選項(xiàng)所列出的最后一個(gè)數(shù)據(jù)表:
MYSQL實(shí)例
CREATE TABLE log_merge(
dt DATETIME NOT NULL,
info VARCHAR(100) NOT NULL,
INDEX(dt)
) ENGINE = MERGE UNION = (log_2004, log_2005, log_2006, log_2007)
INSERT_METHOD = LAST;
MYSQL實(shí)例創(chuàng)建一個(gè)新的成員數(shù)據(jù)表log_2009并讓它有同樣的表結(jié)構(gòu),然后修改log_merge數(shù)據(jù)表把log_2009包括進(jìn)來(lái):
MYSQL實(shí)例
CREATE TABLE log_2009 LIKE log_2008;
ALTER TABLE log_merge
UNION = (log_2004, log_2005, log_2006, log_2007,log_2008,log_2009);
MYSQL實(shí)例注意:使用Merge“合并”起來(lái)的表結(jié)構(gòu)相同的表最好不要有主鍵,否則會(huì)出現(xiàn)這種情況:一共有兩個(gè)成員表,其主鍵在兩個(gè)表中存在相同情況,但是寫(xiě)了一條按相同主鍵值查詢的SQL語(yǔ)句,這時(shí)只能查到UNION列表中第一個(gè)表中的數(shù)據(jù).
MYSQL實(shí)例有關(guān)MySQLMerge存儲(chǔ)引擎小編就給大家介紹這么多,希望對(duì)大家有所贊助!
維易PHP培訓(xùn)學(xué)院每天發(fā)布《Mysql學(xué)習(xí)MySQLMerge存儲(chǔ)引擎》等實(shí)戰(zhàn)技能,PHP、MYSQL、LINUX、APP、JS,CSS全面培養(yǎng)人才。
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/13913.html