mycat全局序列号

举报
丁威 发表于 2021/05/21 01:47:40 2021/05/21
7.9k+ 0 0
【摘要】 1、全局序列化 Mycat支持的全局序列化主要包括 本地文件方式,数据库方式,本地时间戳方式。实际生产环境,建议还是使用数据库方式。   数据库方式配置: <system><property name="sequnceHandlerType">1</property></system>其中0代表本地文件方式,1...

1、全局序列化

Mycat支持的全局序列化主要包括 本地文件方式,数据库方式,本地时间戳方式。实际生产环境,建议还是使用数据库方式。

数据库方式配置:

  1. <system><property name="sequnceHandlerType">1</property></system>
    其中0代表本地文件方式,1代表数据库方式,2代表时间戳方式。
  2. 创建 MYCAT_SEQUENCE表
    
                     CREATE TABLE `MYCAT_SEQUENCE` (
                          `name` varchar(50) NOT NULL,
                          `current_value` int(11) NOT NULL,
                          `increment` int(11) NOT NULL DEFAULT '100',
                           PRIMARY KEY (`name`)
                     ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
        
       
    然后插入一条记录。
    
            insert into MYCAT_SEQUENCE ('name','current_value','increment') values ('GLOBAL',10000,100);
            insert into MYCAT_SEQUENCE  ('name','current_value','increment') values ('ORDER',10000,100);
        
       

    不是在 MYCAT_SEQUENCE 增加了一条记录,Mycat 就会认这个序列化,而是必须在 sequence_db_conf.properties 文件中,做好配置。
      

          然后可以在语句中可以这样写。

  1. 
            next value for MYCAT_SEQGLOBAL
            next value for MYCAT_SEQORDER
        
       

        创建三个函数:
        


       CREATE FUNCTION mycat_seq_currval(seq_name VARCHAR(50)) RETURNS varchar(64)
                    CHARSET utf8
                    DETERMINISTIC
              BEGIN
                      DECLARE
                          retval VARCHAR (64);
                          SET retval = '-999999999,null';
                          SELECT
                                  concat( CAST(current_value AS CHAR),',',CAST(increment AS CHAR) ) INTO retval
                         FROM MYCAT_SEQUENCE
                         WHERE NAME = seq_name;
                         RETURN retval;
              END
              CREATE  FUNCTION mycat_seq_nextval(seq_name VARCHAR(50))
                        RETURNS varchar(64) CHARSET utf8
                        DETERMINISTIC
              BEGIN
                      UPDATE MYCAT_SEQUENCE SET current_value = current_value + increment WHERE name = seq_name;
                      RETURN mycat_seq_currval(seq_name);
              END
             CREATE FUNCTION mycat_seq_setval(p_seq_name VARCHAR (50),p_value INTEGER)
                 RETURNS varchar(64) CHARSET utf8
                  DETERMINISTIC
            BEGIN
                  UPDATE MYCAT_SEQUENCE SET current_value = p_value WHERE NAME = p_seq_name;
                  RETURN mycat_seq_currval(seq_name);
             END
  
 

     

3、在需要分片的表上,在SQL语句时,需要指定,类似于:

insert into es_order( id,order_no ,其他字段) values ( next value for MYCATSEQ_GLOBAL,'20160828161720001',其他字段  )
 

文章来源: blog.csdn.net,作者:中间件兴趣圈,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/prestigeding/article/details/52702057

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。