mycat全局序列号

本文介绍Mycat数据库的全局序列化功能,包括本地文件、数据库和时间戳三种方式,并重点讲解如何通过数据库实现全局序列化。文章还提供了配置示例、SQL语句以及自定义函数的创建步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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',其他字段  )

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

中间件兴趣圈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值