MySQL使用MERGE进行分表实现
来源:互联网 发布:java百度云 编辑:程序博客网 时间:2024/06/07 18:29
使用MERGE进行分表:
发现一个MERGE表一直出现Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist报错,但是在5.0上一直是OK的,于是进行了一些实践后发现是由于MERGE的表索引和其他子表不一致导致。
添加索引之后正常了。而为什么5.0是正常的呢,我猜测是由于5.0的版本对MERGE表没有那么严格的要求。
因此当遇到Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist报错的时候需要从如下几个方面入手:
1、查看是不是有一些表不是MYISAM引擎的表,因为MERGE引擎只适用于MYISAM表
2、查看是不是在union的表中含有不存在的表。
3、查看是不是MERGE的时候引用了不在同一个库的表,并且该表没有指定数据库名字。
4、比较各个表的结构(索引、引擎、列、字符集等)是否一致。
子表代码为:存储引擎要为:MyISAM
mysql> CREATE TABLE `test0` (
-> `uin` int(10) unsigned NOT NULL,-> `data` text NOT NULL,
-> `modtime` int(10) unsigned NOT NULL,
-> PRIMARY KEY (`uin`)
-> ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.25 sec)
mysql> CREATE TABLE `test1` (
-> `uin` int(10) unsigned NOT NULL,
-> `data` text NOT NULL,
-> `modtime` int(10) unsigned NOT NULL,
-> PRIMARY KEY (`uin`)
-> ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.01 sec)
mysql> CREATE TABLE `test2` (
-> `uin` int(10) unsigned NOT NULL,
-> `data` text NOT NULL,
-> `modtime` int(10) unsigned NOT NULL,
-> PRIMARY KEY (`uin`)
-> ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.02 sec)
mysql> CREATE TABLE `test3` (
-> `uin` int(10) unsigned NOT NULL,
-> `data` text NOT NULL,
-> `modtime` int(10) unsigned NOT NULL,
-> PRIMARY KEY (`uin`)
-> ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Query OK, 0 rows affected (0.01 sec)
MERGE表代码为:存储引擎要为MRG_MyISAM
mysql> CREATE TABLE `test` (
-> `uin` int(10) unsigned NOT NULL,
-> `data` text NOT NULL,
-> `modtime` int(10) unsigned NOT NULL,
-> PRIMARY KEY (`uin`)
-> ) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 UNION=(`test0`,`test1`,`test2`,`test3`,`test4`);
Query OK, 0 rows affected (0.01 sec)
并没有test4表
mysql> select * from test;
ERROR 1168 (HY000): Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
mysql> insert into `test0` values(12,'sfs',23);
Query OK, 1 row affected (0.22 sec)
查询的时候报错:
mysql> select * from test;
ERROR 1168 (HY000): Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
改成:
mysql> drop table test;
Query OK, 0 rows affected (0.00 sec)
mysql> CREATE TABLE `test` (
-> `uin` int(10) unsigned NOT NULL,
-> `data` text NOT NULL,
-> `modtime` int(10) unsigned NOT NULL,
-> PRIMARY KEY (`uin`)
-> ) ENGINE=MRG_MyISAM DEFAULT CHARSET=latin1 UNION=(`test0`,`test1`,`test2`,`test3`);
Query OK, 0 rows affected (0.01 sec)
去掉test4
mysql> select * from test;
+-----+------+---------+
| uin | data | modtime |
+-----+------+---------+
| 12 | sfs | 23 |
+-----+------+---------+
1 row in set (0.00 sec)
[root@localhost105 testdb]# ll
total 304
-rw-r----- 1 mysql mysql 8624 Aug 4 17:27 test0.frm
-rw-r----- 1 mysql mysql 20 Aug 4 17:29 test0.MYD
-rw-r----- 1 mysql mysql 2048 Aug 4 17:29 test0.MYI
-rw-r----- 1 mysql mysql 8624 Aug 4 17:27 test1.frm
-rw-r----- 1 mysql mysql 0 Aug 4 17:27 test1.MYD
-rw-r----- 1 mysql mysql 1024 Aug 4 17:27 test1.MYI
-rw-r----- 1 mysql mysql 8624 Aug 4 17:27 test2.frm
-rw-r----- 1 mysql mysql 0 Aug 4 17:27 test2.MYD
-rw-r----- 1 mysql mysql 1024 Aug 4 17:27 test2.MYI
-rw-r----- 1 mysql mysql 8624 Aug 4 17:27 test3.frm
-rw-r----- 1 mysql mysql 0 Aug 4 17:27 test3.MYD
-rw-r----- 1 mysql mysql 1024 Aug 4 17:27 test3.MYI
-rw-r----- 1 mysql mysql 8624 Aug 4 17:45 test.frm
-rw-r----- 1 mysql mysql 24 Aug 4 17:45 test.MRG
test表没有数据文件test.MYD
实际存数据是test0,test1,test2,test3. 而test总表只是存了分表的信息,并没有存数据。
- MySQL使用MERGE进行分表实现
- mysql用merge引擎进行分表
- 使用Mysql Merge存储引擎实现分表
- mysql使用MRG_MyISAM(MERGE)实现水平分表
- mysql使用MRG_MyISAM(MERGE)实现水平分表
- 使用Merge存储引擎实现 mysql分表
- 使用Mysql Merge存储引擎实现分表
- 使用Merge存储引擎实现 mysql分表
- mysql使用MRG_MyISAM(MERGE)实现水平分表
- Mysql Merge存储引擎实现分表
- Mysql的Merge存储引擎实现分表查询
- Mysql的Merge存储引擎实现分表查询
- mysql数据库分表及实现---MERGE分表法
- MySQL利用MERGE存储引擎来实现分表
- mysql下merge分表
- Mysql MERGE引擎分表查询机制
- mysql定时创建MERGE分表
- mysql 分表,分区,分库相关及merge引擎
- NYOJ 4 ASCII码排序
- 从基础做起--浏览器渲染
- HDOJ 6077-Time To Get Up
- 全局变量,局部变量,静态变量和实例变量的区别
- andriod studio 注释乱码问题
- MySQL使用MERGE进行分表实现
- Parity game POJ
- NYOJ 93 汉诺塔(三)(栈)
- 重构之重新组织数据
- ListView添加CheckBox实现单选全选(链接)
- 浅谈SSH+ajax分页效果
- HDOJ 6066-RXD's date
- 冒泡排序
- Java 在前后台进行交互时,所要注意的情况