MERGE表方面的問題 |
發布時間: 2012/8/24 17:30:22 |
下列是已知關于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表。 本文出自:億恩科技【www.laynepeng.cn】 |