参考
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操作就好了。