mycat全局序列号

举报
丁威 发表于 2021/05/21 01:47:40 2021/05/21
【摘要】 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表
    
        
    1.          CREATE TABLE `MYCAT_SEQUENCE` (
    2.               `name` varchar(50NOT NULL,
    3.               `current_value` int(11NOT NULL,
    4.               `increment` int(11NOT NULL DEFAULT '100',
    5.                PRIMARY KEY (`name`)
    6.          ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    然后插入一条记录。
    
        
    1. insert into MYCAT_SEQUENCE ('name','current_value','increment') values ('GLOBAL',10000,100);
    2. insert into MYCAT_SEQUENCE  ('name','current_value','increment') values ('ORDER',10000,100);

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

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

  1. 
        
    1. next value for MYCAT_SEQGLOBAL
    2. next value for MYCAT_SEQORDER

        创建三个函数:
        


  
  1.  CREATE FUNCTION mycat_seq_currval(seq_name VARCHAR(50)) RETURNS varchar(64)          
  2.               CHARSET utf8
  3.               DETERMINISTIC
  4.         BEGIN
  5.                 DECLARE
  6.                     retval VARCHAR (64);
  7.                     SET retval = '-999999999,null';
  8.                     SELECT
  9.                             concatCAST(current_value AS CHAR),',',CAST(increment AS CHAR) ) INTO retval
  10.                    FROM MYCAT_SEQUENCE
  11.                    WHERE NAME = seq_name;
  12.                    RETURN retval;
  13.         END
  14.         CREATE  FUNCTION mycat_seq_nextval(seq_name VARCHAR(50)) 
  15.                   RETURNS varchar(64CHARSET utf8
  16.                   DETERMINISTIC
  17.         BEGIN
  18.                 UPDATE MYCAT_SEQUENCE SET current_value = current_value + increment WHERE name = seq_name;
  19.                 RETURN mycat_seq_currval(seq_name);
  20.         END
  21.        CREATE FUNCTION mycat_seq_setval(p_seq_name VARCHAR (50),p_value INTEGER)
  22.            RETURNS varchar(64CHARSET utf8
  23.             DETERMINISTIC
  24.       BEGIN
  25.             UPDATE MYCAT_SEQUENCE SET current_value = p_value WHERE NAME = p_seq_name;
  26.             RETURN mycat_seq_currval(seq_name);
  27.        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

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

全部回复

上滑加载中

设置昵称

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

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

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