码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-08-20 00:33:03      阅读:23      评论:0      收藏:0      [点我收藏+]

标签:数据表   sql   数据库名   重要   事务   结构   字符集   ref   sts   

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存储引擎应用

 

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

标签:数据表   sql   数据库名   重要   事务   结构   字符集   ref   sts   

原文地址:https://www.cnblogs.com/bridgestone29-08/p/11380419.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!