MYSQL之 分表

参考
https://blog.csdn.net/weixin_29195137/article/details/113121954
https://www.cnblogs.com/phpfensi/p/4192055.html
https://blog.csdn.net/weixin_32729025/article/details/114341581
https://www.cnblogs.com/1584779745qq/p/6599877.html

实现一个简单的mysql分表演示:这里使用 MERGE分表法

1,创建一个 已知数据表 存储着所有的成员信息

CREATE   TABLE  `member` (   
`id` BIGINT  auto_increment   ,   
`name` VARCHAR ( 20 ),   
`sex` tinyint NOT   NULL default '0' ,   
PRIMARY   KEY  ( `id` )   
) 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 ;

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

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;

这样就实现了分表,注意:tb_member 总表只是一个外壳,存取数据发生在一个一个的分表里面。

以上步骤,实现了,将 member表中的数据分到了member1,member2分表中,分表的数据通过tb_member总表来展现

图片

总表中

分表中
在这里插入图片描述在这里插入图片描述

注意,合并表(即总表)也必须和分表有相同的结构,类型,长度,包括字段的顺序都必须一致这里的INSERT_METHOD=0表示不允许对本表进行insert操作。好了,当需要查询的时候,我们可以只对 tb_member 这个表进行操作就可以了,也就是说这个表仅仅只能进行select操作

insert 新增数据

那么对于插入也就是insert操作应该如何来搞呢,首先就是获取唯一的id了,这里就还需要一个表来专门创建id,代码如下

CREATETABLE `test`.`create_id` ( `id` BIGINT( 20 ) NOTNULL AUTO_INCREMENT PRIMARYKEY ) ENGINE = MYISAM

就是说,当我们需要插入数据的时候,必须由这个表来产生id值,我的php代码的方法如下

function get_AI_ID() { 
	$sql = "insert into create_id (id) values('')"; 
	$this->db->query($sql); 
	return$this->db->insertID(); 
}

好了,现在假设我们要插入一条数据了,应该怎么操作呢?还是继续看代码吧

function new_Article() { 
	 $id = $this->get_AI_ID();
	 $table_name = $this->get_Table_Name($id); 
	 $sql = "insert into {$table_name} (id,subject,content) values('{$id}','测试标题','测试内容')"; 	
	 $this->db->query($sql); 
}

/** 用于根据 id 获取表名 */

function get_Table_Name($id) {
	 return 'article_'.intval($id)%10;
 }

思路就是先获取id,然后根据id获取应该插入到哪个表
对于update的操作我想应该不需要再说了吧,无非是有了id,然后获取表名,然后进行update操作就好了。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值