这里所作的分表是指水平拆分,就是多张表数据结构彻底一致(全部的数据列一致,很少很多)。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 等,相似的约定是否一致(全拷贝过来!!!)。
参考资料: