mysql数据库分表及实现---MERGE分表法

来源:互联网 发布:尚学堂大数据课表 编辑:程序博客网 时间:2024/06/05 16:55


1,创建一个完整表存储着所有的成员信息

create table member(id bigint auto_increment primary key,name varchar(20),sex tinyint not nulldefault '0')engine=myisam default charset=utf8 auto_increment=1;

加入点数据:

  insert into member(id,name,sex) values (1,'jacson','0');

  insert into member(name,sex) select name,sex from member;

第二条语句多执行几次就有了很多数据。


2,下面我们进行分表:这里我们分两个表tb_member1,tb_member2   


DROP table IF EXISTS tb_member1;create table tb_member1(    id bigint primary key auto_increment ,    name varchar(20),    sex tinyint not null default '0')ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 
DROP table IF EXISTS tb_member2;create table tb_member2(    id bigint primary key auto_increment ,    name varchar(20),    sex tinyint not null default '0')ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; 
//创建tb_member2也可以用下面的语句 create table tb_member2 like tb_member1;

 3,创建主表tb_member


DROP table IF EXISTS tb_member;
create table tb_member(
id bigint primary key auto_increment ,
name varchar(20),
sex tinyint not null default '0'
)ENGINE=MERGE UNION=(tb_member1,tb_member2) INSERT_METHOD=LAST CHARSET=utf8 AUTO_INCREMENT=1 ;


查看一下tb_member表的结构:desc tb_member;


4,接下来,我们把数据分到两个分表中去:

insert into tb_member1(id,name,sex) select id,name,sex from member where id%2=0;

insert into tb_member2(id,name,sex) select id,name,sex from member where id%2=1;

查看一下主表的数据:select * from tb_member;


注意:总表只是一个外壳,存取数据发生在一个一个的分表里面。

ps:创建主表时可能会出现下面的错误:

ERROR 1168 (HY000): Unable to open underlying table which is differently defined
or of non-MyISAM type or doesn't exist

若遇到上面这种错误,一般从两方面来排查:(从这两方面一般可以解决这个问题,本人也遇到了。)

  1,查看上面的分表数据库引擎是不是MyISAM.

  2,查看分表与指标的字段定义是否一致。


1 0