[Err] 1168 - Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist


Mysql運用MERGE引擎進行分表

這里所做的分表是指水平拆分,就是多張表數據結構完全一致(所有的數據列一致,不多不少)。

要想用 MERGE引擎,所有需要拆分的表及拆分后的字表,必須為 MYISAM 引擎,這個好難滿足。因為 MYISAM 引擎不支持事務,這在生產實際中極少數據表會采用 MYISAM。因為現在的應用,都想用分布式事務(極麻煩),不用事務那就別提了,辦不到。

將user拆分成二張表user1和user2,

// (備份users表)備份!備份!備份!重要的事情說三遍。
DROP TABLE IF EXISTS users;
CREAT users LIKE user1;
// 將users表的所有附加屬性都拷貝過來
ALTER TABLE users ENGINE=MRG_MYISAM UNION=(user1,user2) INSERT_METHOD=LAST;  

【特注】:在創建完成后,所有對users的操作都可能報一個錯:[Err] 1168 - Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist

究其原因,就是拷貝的時候遺漏了。我是遺漏了 CHARSET=utf8 其他小伙伴呢?!!!

還有可能是(網絡上的):

1、查看是不是有一些表不是MYISAM引擎的表,因為MERGE引擎只適用於MYISAM表

2、查看是不是在union的表中含有不存在的表。

3、查看是不是MERGE的時候引用了不在同一個庫的表,並且該表沒有指定數據庫名字。

4、比較各個表的結構(索引、引擎、列、字符集等)是否一致。

5、CHARSET=utf8 等,類似的約定是否一致(全拷貝過來!!!)。

 

參考資料:

  1.mysql的merge存儲引擎應用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM