這裏所作的分表是指水平拆分,就是多張表數據結構徹底一致(全部的數據列一致,很少很多)。mysql
要想用 MERGE引擎,全部須要拆分的表及拆分後的字表,必須爲 MYISAM 引擎,這個好難知足。由於 MYISAM 引擎不支持事務,這在生產實際中極少數據表會採用 MYISAM。由於如今的應用,都想用分佈式事務(極麻煩),不用事務那就別提了,辦不到。sql
將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 其餘小夥伴呢?!!!數據結構
還有多是(網絡上的):分佈式
一、查看是否是有一些表不是MYISAM引擎的表,由於MERGE引擎只適用於MYISAM表spa
二、查看是否是在union的表中含有不存在的表。.net
三、查看是否是MERGE的時候引用了不在同一個庫的表,而且該表沒有指定數據庫名字。code
四、比較各個表的結構(索引、引擎、列、字符集等)是否一致。blog
五、CHARSET=utf8 等,相似的約定是否一致(全拷貝過來!!!)。
參考資料: