MySQLMerge存儲(chǔ)引擎
MERGE存儲(chǔ)引擎把一組MyISAM數(shù)據(jù)表當(dāng)做一個(gè)邏輯單元來對待,讓我們可以同時(shí)對他們進(jìn)行查詢。構(gòu)成一個(gè)MERGE數(shù)據(jù)表結(jié)構(gòu)的各成員MyISAM數(shù)據(jù)表必須具有完全一樣的結(jié)構(gòu)。每一個(gè)成員數(shù)據(jù)表的數(shù)據(jù)列必須按照同樣的順序定義同樣的名字和類型,索引也必須按照同樣的順序和同樣的方式定義。
Merge存儲(chǔ)引擎允許將一組使用MyISAM存儲(chǔ)引擎的并且表結(jié)構(gòu)相同(即每張表的字段順序、字段名稱、字段類型、索引定義的順序及其定義的方式必須相同)的數(shù)據(jù)表合并為一個(gè)表,方便了數(shù)據(jù)的查詢。
假設(shè)有l(wèi)og_2004、log_2005、log_2006、log_2007 這四張日志記錄表,其數(shù)據(jù)分別是每一年的數(shù)據(jù),表結(jié)構(gòu)如下(YY代表年份):
CREATE TABLE log_YY ( dt DATETIME NOT NULL, info VARCHAR(100) NOT NULL, INDEX (dt) ) ENGINE = MyISAM;
可以通過如下SQL語句把這些表歸攏為一個(gè)邏輯單元:
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);
說明: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ù):
SELECT COUNT(*) FROM log_merge;
譬如查詢每年各有多少日志記錄:
SELECT YEAR(dt) AS y, COUNT(*) AS entries FROM log_merge GROUP BY y;
創(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語句指定將新數(shù)據(jù)添加到log_2007數(shù)據(jù)表----它是UNION選項(xiàng)所列出的最后一個(gè)數(shù)據(jù)表:
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;
創(chuàng)建一個(gè)新的成員數(shù)據(jù)表log_2009并讓它有同樣的表結(jié)構(gòu),然后修改log_merge數(shù)據(jù)表把log_2009包括進(jìn)來:
CREATE TABLE log_2009 LIKE log_2008; ALTER TABLE log_merge UNION = (log_2004, log_2005, log_2006, log_2007,log_2008,log_2009);
注意:使用Merge“合并”起來的表結(jié)構(gòu)相同的表最好不要有主鍵,否則會(huì)出現(xiàn)這種情況:一共有兩個(gè)成員表,其主鍵在兩個(gè)表中存在相同情況,但是寫了一條按相同主鍵值查詢的SQL語句,這時(shí)只能查到UNION列表中第一個(gè)表中的數(shù)據(jù)。
有關(guān)MySQLMerge存儲(chǔ)引擎小編就給大家介紹這么多,希望對大家有所幫助!
相關(guān)文章
Windows下MySQL 5.7無法啟動(dòng)的解決方法
從網(wǎng)上下了5.7 的MySQL,在bin目錄下執(zhí)行 start mysqld ,彈出個(gè)cmd窗口一閃就沒了,也看不清是什么報(bào)錯(cuò)。mysqld --install安裝了服務(wù),也啟動(dòng)不了,下面通過本文給大家分享下解決辦法2016-12-12
MySQL 的啟動(dòng)選項(xiàng)和系統(tǒng)變量實(shí)例詳解
這篇文章主要介紹了MySQL 的啟動(dòng)選項(xiàng)和系統(tǒng)變量,結(jié)合實(shí)例形式詳細(xì)分析了MySQL 啟動(dòng)選項(xiàng)和系統(tǒng)變量具體原理、功能、用法及操作注意事項(xiàng),需要的朋友可以參考下2020-05-05
MySQL+Redis緩存+Gearman共同構(gòu)建數(shù)據(jù)庫緩存的方法
這篇文章主要介紹了MySQL+Redis緩存+Gearman共同構(gòu)建數(shù)據(jù)庫緩存,部署后在MySQL端進(jìn)行創(chuàng)建一個(gè)用戶給與遠(yuǎn)程登錄權(quán)限,使得Redis作為緩存可以用來同步數(shù)據(jù)使用,需要的朋友可以參考下2022-10-10
Mysql中TIMESTAMPDIFF函數(shù)的語法與練習(xí)案例
在應(yīng)用時(shí)經(jīng)常要使用這兩個(gè)函數(shù)TIMESTAMPDIFF和TIMESTAMPADD,下面這篇文章主要給大家介紹了關(guān)于Mysql中TIMESTAMPDIFF函數(shù)的語法與練習(xí)案例的相關(guān)資料,需要的朋友可以參考下2022-09-09
Mysql數(shù)據(jù)庫手動(dòng)及定時(shí)備份步驟
最近剛好用到了數(shù)據(jù)庫備份,想著還有個(gè)別實(shí)習(xí)或者剛工作的小伙伴一個(gè)drop不小心刪表、刪庫,心內(nèi)慌得一批不知道該怎么辦,就打算跑路了,學(xué)會(huì)這個(gè)小技巧就不用跑路了2021-11-11
計(jì)算機(jī)二級考試MySQL知識(shí)點(diǎn) mysql alter命令
這篇文章主要為大家詳細(xì)介紹了計(jì)算機(jī)二級考試MySQL知識(shí)點(diǎn),詳細(xì)介紹了mysql中alter命令的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
在linux服務(wù)器上配置mysql并開放3306端口的操作步驟
這篇文章主要介紹了在linux服務(wù)器上配置mysql并開放3306端口,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09

