MERGE表方面的問題 |
發(fā)布時間: 2012/8/24 17:30:22 |
下列是已知關(guān)于MERGE表的問題:
· 如果你使用ALTER TABLE 來把MERGE表變?yōu)槠渌眍愋停降讓颖淼挠成渚捅粊G失了。取而代之的,來自底層MyISAM表的行被復(fù)制到已更換的表中,該表隨后被指定新類型。 · REPLACE不起作用。
· 沒有WHERE子句,或者在任何被映射到一個打開的MERGE表上的任何一個表上的REPAIR TABLE,TRUNCATE TABLE, OPTIMIZE TABLE或ANALYZE TABLE,你不能使用DROP TABLE, ALTER TABLE, DELETE FROM。如果你這么做了,MERGE表將仍舊指向原始表,這樣產(chǎn)生意外結(jié)果。解決這個不足最簡單的辦法是在執(zhí)行任何一個這些操作之前發(fā)出一個FLUSH TABLES語句來確保沒有MERGE表仍舊保持打開。
· 一個MERGE表不能在整個表上維持UNIQUE約束。當你執(zhí)行一個INSERT, 數(shù)據(jù)進入第一個或者最后一個MyISAM表(取決于INSERT_METHOD選項的值)。MySQL確保唯一鍵值在那個MyISAM表里保持唯一,但不是跨集合里所有的表。 · 當你創(chuàng)建一個MERGE表之時,沒有檢查去確保底層表的存在以及有相同的機構(gòu)。當MERGE表被使用之時,MySQL檢查每個被映射的表的記錄長度是否相等,但這并不十分可靠。如果你從不相似的MyISAM表創(chuàng)建一個MERGE表,你非常有可能撞見奇怪的問題。
· 在MERGE表中的索引的順序和它的底層表中的索引應(yīng)該一樣。如果你使用ALTER TABLE給一個被用在MERGE表中的表添加一個UNIQUE索引,然后使用ALTER TABLE在MERGE表上添加一個非唯一索引,如果在底層表上已經(jīng)有一個非唯一索引,對表的索引排序是不同的。(這是因為ALTER TABLE把UNIQUE索引放在非唯一索引之前以利于重復(fù)鍵的快速檢測 )。因此對使用這樣索引的表的查詢可能返回不期望的結(jié)果。
· 在Windows中,在一個被MERGE表使用的表上DROP TABLE不起作用,因為MERGE引擎的表映射對MySQL的更上層隱藏。因為Windows不允許已打開文件的刪除,你首先必須刷新所有MERGE表(使用FLUSH TABLES)或在移除該表之前移除MERGE表。 本文出自:億恩科技【www.allwellnessguide.com】 服務(wù)器租用/服務(wù)器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |