mysql实现merge分表_使用Merge存储引擎实现MySQL分表

TABLE IF NOT EXISTSuser1 (

idint(11) NOT NULLAUTO_INCREMENT,

namevarchar(50) DEFAULT NULL,

sexint(1) NOT NULL DEFAULT 0,PRIMARY KEY(id)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

2.用户2表

CREATE TABLE IF NOT EXISTSuser2 (

idint(11) NOT NULLAUTO_INCREMENT,

namevarchar(50) DEFAULT NULL,

sexint(1) NOT NULL DEFAULT 0,PRIMARY KEY(`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

3.主表

CREATE TABLE IF NOT EXISTSalluser (

idint(11) NOT NULLAUTO_INCREMENT,

namevarchar(50) DEFAULT NULL,

sexint(1) NOT NULL DEFAULT 0,INDEX(id)) ENGINE =MERGE UNION=(user1,user2) INSERT_METHOD=LAST AUTO_INCREMENT=1 ;

1) ENGINE = MERGE 和 ENGINE = MRG_MyISAM是一样的意思,都是代表使用的存储引擎是 Merge。

2) INSERT_METHOD,表示插入方式,取值可以是:0 和 1,0代表不允许插入,1代表可以插入;

3) FIRST插入到UNION中的第一个表,LAST插入到UNION中的最后一个表。

三、操作

1. 先在user1表中增加一条数据,然后再在user2表中增加一条数据,查看 alluser中的数据。当然这种操作是不正确的,因为我们只在总表上操作(增删改查),但是当增加的时候 我们同样可以在alluser中增加一条id相同的记录。

insert into user1(name,sex) values (‘张三‘,1);

insert into user2(name,sex) values (‘李四‘,2);

select * from alluser;  发现是刚刚插入的数据如下:

20180110225425934222.png

这就出现了一个id重复,这就造成了当删除和修改的时候异常,解决办法是给 alluser的id赋唯一值。

我们解决方法是,重新建立一张表tb_ids(id int),然后在alluser表中建立一个触发器,触发器的功能是 当在alluser表中增加一条记录时,取出tb_ids中的id值,然后将tb_ids的id值加1,

触发器内容如下:

DELIMITER $$CREATE TRIGGERtr_seq

BEFOREINSERT onalluserFOR EACH ROW BEGIN

select id into @testid from tb_ids limit 1;update tb_ids set id = @testid + 1;set new.id = @testid;END$$

DELIMITER;

2.在总表中增加一条数据,

insert into alluser(name,sex) values(‘王五‘,1);

insert into alluser(name,sex) values(‘赵六‘,2);

使用Merge存储引擎实现MySQL分表

标签:ast   连接池   操作   ges   意思   arc   image   技术   rom

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:http://www.cnblogs.com/xbq8080/p/6628034.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值