mysql多表统一主键策略

在研究数据库分表(sharding)时,来自于同一主表的分表主要使用统一主键策略。

·如果使用uuid,可以很方便的解决这个问题,但是uuid是字符串型,并且也非常长,缺点可想而知。

·使用另一个Sequence表维护id,流程如下:

    1·创建sequence表

  1.  
    DROP TABLE IF EXISTS `sequence`;
  2.  
    CREATE TABLE `sequence` (
  3.  
    `tablename` varchar(64) NOT NULL,
  4.  
    `nextid` bigint(20) DEFAULT NULL,
  5.  
    PRIMARY KEY (`tablename`)
  6.  
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

 

    2·创建主键策略函数

  1.  
    DROP FUNCTION IF EXISTS `auto_seq`;
  2.  
     
  3.  
    CREATE DEFINER = `root`@`localhost` FUNCTION `auto_seq`(tb_purpose VARCHAR(64))
  4.  
    RETURNS int(11)
  5.  
    BEGIN
  6.  
    DECLARE reid int;
  7.  
    set reid = (select `nextid` from `sequence` where `tablename`=tb_purpose limit 1);
  8.  
    update `sequence` set `nextid`=reid + 1;
  9.  
    return reid;
  10.  
    end;


    3·在分表中创建触发器,此触发器为插入前触发,调用主键策略函数返回的结果赋予id。

  1.  
    DROP TRIGGER `auto_seq`;
  2.  
     
  3.  
    CREATE TRIGGER `auto_seq` BEFORE INSERT ON `item`
  4.  
    FOR EACH ROW begin
  5.  
    set new.id = auto_seq('item');
  6.  
    end;

 

之所以采用以上方式实现,一是mysql的自增策略只能针对一张表;二是使用了oracle中自增策略的思想,在oracle中想要实现自增必须绑定一个触发器。

--------------------- 本文来自 shulibee 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/shulibee/article/details/42971701?utm_source=copy 

转载于:https://www.cnblogs.com/t0000/articles/9717078.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值