[Err] 1168 - Unable to open underlying table which is differently defined or of non-MyISAM type or d

Mysql运用MERGE引擎进行分表

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

 

参考资料:

  1.mysql的merge存储引擎应用

相关文章
相关标签/搜索