這篇文章帶給大家的內容是關於Mysql中MERGE儲存引擎的介紹(程式碼範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
MERGE 儲存引擎把一組 MyISAM 資料表當作邏輯單元來對待,讓我們可以同時對他們進行查詢。構成一個 MERGE 資料表結構的各成員 MyISAM 資料表必須具有完全一樣的表格結構。每一個成員資料表的資料列必須按照相同的順序定義相同的名字和類型,索引也必須按照相同的順序和相同的方式定義。假設你有幾個日誌資料表,他們內容分別是這幾年來每一年的日誌記錄項,他們的定義都是下面這樣,YY 代表年份(推薦課程:MySQL教程)
CREATE TABLE log_YY ( dt DATETIME NOT NULL, info VARCHAR(100) NOT NULL, INDEX (dt) ) ENGINE = MyISAM;
假設日誌資料表的目前集合包括log_2004、log_2005、log_2006、log_2007 ,而你可以建立一個如下所示的MERGE 資料表把他們歸攏為一個邏輯單元:
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 選項的值必須是MERGE,UNION 選項列出了將被收錄在這個MERGE 資料表離得各有關資料表。把這個 MERGE 創建出來後,就可以像對待任何其他資料表一樣查詢它,只是每一次查詢都將同時作用與構成它的每一個成員資料表 。下面這個查詢可以讓我們知道上述幾個日誌資料表的資料行的總數:
SELECT COUNT(*)FROM log_merge;
下面這個查詢用來確定在這幾年裡每年各有多少日誌記錄項:
SELECT YEAR(dt) AS y, COUNT(*) AS entries FROM log_merge GROUP BY y;
除了方便同時引用多個資料表而無需發出多個查詢,MERGE 資料表還提供了以下一些便利。
1)、MERGE 資料表可以用來建立一個尺寸超過各個 MyISAM 資料表所允許的最大長度邏輯單元
2)、經過壓縮的資料表包含到 MERGE 資料表裡。比方說,在某一年結束之後,你應該不會再往相應的日誌檔案裡添加記錄,所以你可以用myisampack 工具壓縮它以節省空間,而MERGE 資料表仍可以像往常那樣工作
3 )、MERGE 資料表也支援DELETE 和UPDATE 操作。 INSERT 操作比較麻煩,因為 MySQL 需要知道應該把新資料行插入哪一個成員表裡去。在MERGE 資料表的定義裡可以包含一個INSERT_METHOD 選項,這個選項的可取值是 NO、FIRST、LAST,他們的意義依序是INSERT操作是被禁止的、新資料行會被插入到現在UNION 選項裡列出的第一個數據表或最後一個數據表。比方說,以下定義將對log_merge 資料表的INSERT 操作被當作對log_2007 資料表----它是UNION 選項所列出的最後一個資料表:
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;
建立一個新的成員資料表log_2009 並且讓他有同樣的表格結構,然後修改log_merge 資料表把log_2009 包含進來:log_2009:
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中MERGE儲存引擎的介紹(程式碼範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!