Mysql中MERGE存儲(chǔ)引擎的介紹(代碼示例)

本篇文章給大家?guī)?lái)的內(nèi)容是關(guān)于mysql中merge存儲(chǔ)引擎的介紹(代碼示例),有一定的參考價(jià)值,有需要的朋友可以參考一下,希望對(duì)你有所幫助。

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ù)列必須按照同樣的順序定義同樣的名字和類型,索引也必須按照同樣的順序和同樣的方式定義。假設(shè)你有幾個(gè)日志數(shù)據(jù)表,他們內(nèi)容分別是這幾年來(lái)每一年的日志記錄項(xiàng),他們的定義都是下面這樣,YY 代表年份(推薦課程:MySQL教程)  

CREATE?TABLE?log_YY?(? ????dt?DATETIME?NOT?NULL,? ????info?VARCHAR(100)?NOT?NULL,? ????INDEX?(dt)? )?ENGINE?=?MyISAM;

假設(shè)日志數(shù)據(jù)表的當(dāng)前集合包括 log_2004、log_2005、log_2006、log_2007 ,而你可以創(chuàng)建一個(gè)如下所示的 MERGE 數(shù)據(jù)表把他們歸攏為一個(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è) MERGE 數(shù)據(jù)表離得各有關(guān)數(shù)據(jù)表。把這個(gè) MERGE 創(chuàng)建出來(lái)后,就可以像對(duì)待任何其他數(shù)據(jù)表那樣查詢它,只是每一次查詢都將同時(shí)作用與構(gòu)成它的每一個(gè)成員數(shù)據(jù)表 。下面這個(gè)查詢可以讓我們知道上述幾個(gè)日志數(shù)據(jù)表的數(shù)據(jù)行的總數(shù):

SELECT?COUNT(*)FROM?log_merge;

下面這個(gè)查詢用來(lái)確定在這幾年里每年各有多少日志記錄項(xiàng):

SELECT?YEAR(dt)?AS?y,?COUNT(*)?AS?entries?FROM?log_merge?GROUP?BY?y;

  除了便于同時(shí)引用多個(gè)數(shù)據(jù)表而無(wú)需發(fā)出多條查詢,MERGE 數(shù)據(jù)表還提供了以下一些便利。

  1)、MERGE 數(shù)據(jù)表可以用來(lái)創(chuàng)建一個(gè)尺寸超過(guò)各個(gè) MyISAM 數(shù)據(jù)表所允許的最大長(zhǎng)度邏輯單元
  2)、經(jīng)過(guò)壓縮的數(shù)據(jù)表包括到 MERGE 數(shù)據(jù)表里。比如說(shuō),在某一年結(jié)束之后,你應(yīng)該不會(huì)再往相應(yīng)的日志文件里添加記錄,所以你可以用 myisampack 工具壓縮它以節(jié)省空間,而 MERGE 數(shù)據(jù)表仍可以像往常那樣工作
  3)、MERGE 數(shù)據(jù)表也支持 delete 和 UPDATE 操作。INSERT 操作比較麻煩,因?yàn)?mysql 需要知道應(yīng)該把新數(shù)據(jù)行插入到哪一個(gè)成員表里去。在 MERGE 數(shù)據(jù)表的定義里可以包括一個(gè) INSERT_METHOD 選項(xiàng),這個(gè)選項(xiàng)的可取值是?NO、FIRST、LAST,他們的含義依次是 INSERT操作是被禁止的、新數(shù)據(jù)行將被插入到現(xiàn)在 UNION 選項(xiàng)里列出的第一個(gè)數(shù)據(jù)表或最后一個(gè)數(shù)據(jù)表。比如說(shuō),以下定義將對(duì) log_merge 數(shù)據(jù)表的 INSERT 操作被當(dāng)作對(duì) 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)來(lái):log_2009:?

CREATE?TABLE?log_2009?LIKE?log_2008;?//根據(jù)舊表創(chuàng)建新表 ALTER?TABLE?log_merge?UNION?=?(log_2004,?log_2005,?log_2006,log_2007,log_2008,log_2009);

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊10 分享