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