Mysql 學習 MERGE表方面的問題 二

2021-09-23 21:56:10 字數 1016 閱讀 3243

下列是已知關於merge表的問題:

·如果你使用alter table 來把merge表變為其它表型別,到底層表的對映就被丟失了。取而代之的,來自底層myisam表的行被複製到已更換的表中,該錶隨後被指定新型別。

·replace不起作用。

·沒有where子句,或者在任何被對映到乙個開啟的merge表上的任何乙個表上的repair table,truncate table, optimize table或analyze table,你不能使用drop table, alter table, delete from。如果你這麼做了,merge表將仍舊指向原始表,這樣產生意外結果。解決這個不足最簡單的辦法是在執行任何乙個這些操作之前發出乙個flush tables語句來確保沒有merge表仍舊保持開啟。

·乙個merge表不能在整個表上維持unique約束。當你執行乙個insert, 資料進入第乙個或者最後乙個myisam表(取決於insert_method選項的值)。mysql確保唯一鍵值在那個myisam表裡保持唯一,但不是跨集合裡所有的表。

·當你建立乙個merge表之時,沒有檢查去確保底層表的存在以及有相同的機構。當merge表被使用之時,mysql檢查每個被對映的表的記錄長度是否相等,但這並不十分可靠。如果你從不相似的myisam表建立乙個merge表,你非常有可能撞見奇怪的問題。

·在merge表中的索引的順序和它的底層表中的索引應該一樣。如果你使用alter table給乙個被用在merge表中的表新增乙個unique索引,然後使用alter table在merge表上新增乙個非唯一索引,如果在底層表上已經有乙個非唯一索引,對錶的索引排序是不同的。(這是因為alter table把unique索引放在非唯一索引之前以利於重複鍵的快速檢測 )。因此對使用這樣索引的表的查詢可能返回不期望的結果。

·在windows中,在乙個被merge表使用的表上drop table不起作用,因為merge引擎的表對映對mysql的更上層隱藏。因為windows不允許已開啟檔案的刪除,你首先必須重新整理所有merge表(使用flush tables)或在移除該錶之前移除merge表。 

Mysql的merge表型別

將多個表在邏輯上當作乙個表 建立後有兩個檔案,frm 表結構定義 mrg union表的名字清單 兩個基本表 create table merge 1 id int 5 not null,name varchar 100 not null,primary key id create table me...

有關於Mysql的MERGE表型別

他將多個表在邏輯上當作乙個表來查詢。他建立後有兩個檔案,frm 表結構定義 mrg union表的名字清單 兩個基本表 create table test merge 1 id int 5 not null,value varchar 100 not null,primary key id crea...

MySQL中merge表儲存引擎用法

在mysql資料庫中,merge表有點類似於檢視。mysql的merge引擎型別允許你把許多結構相同的表合併為乙個表。之後,你可以執行查詢,從多個表返回的結果就像從乙個表返回的結果一樣。每乙個合併的表必須有完全相同表的定義和結構。mysql merge表的優點 a.分離靜態的和動態的資料 b.利用結...