mycat使用全局自增id数据库方式

11 篇文章 0 订阅

1.创建Mycat生成唯一主键所需要的函数,放在一台mysql上即可,最好是放在mycat本机的mysql上

DROP TABLE IF EXISTS MYCAT_SEQUENCE;
CREATE TABLE MYCAT_SEQUENCE (
NAME VARCHAR (50) NOT NULL,
current_value INT NOT NULL,
increment INT NOT NULL DEFAULT 100,
PRIMARY KEY (NAME)
) ENGINE = INNODB ;
 
 
INSERT INTO MYCAT_SEQUENCE(NAME,current_value,increment) VALUES ('GLOBAL', 100000, 100);
 
DROP FUNCTION IF EXISTS `mycat_seq_currval`;
DELIMITER ;;
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
;;
DELIMITER ;
 
DROP FUNCTION IF EXISTS `mycat_seq_nextval`;
DELIMITER ;;
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
;;
DELIMITER ;
 
 
DROP FUNCTION IF EXISTS `mycat_seq_setval`;
DELIMITER ;;
CREATE FUNCTION `mycat_seq_setval`(seq_name VARCHAR(50), VALUE INTEGER) 
RETURNS VARCHAR(64) CHARSET utf8
    DETERMINISTIC
BEGIN UPDATE MYCAT_SEQUENCE  
                   SET current_value = VALUE  
                   WHERE NAME = seq_name;  
         RETURN mycat_seq_currval(seq_name);  
END
;;
DELIMITER ;

#查询test张表里面的数据

select mycat_seq_nextval(test');

返回如下结果则正常
在这里插入图片描述
2.插入要自增的表名称到MYCAT_SEQUENC表

插入数据的时候,一定要注意,自己需要插入的表,一定要是大写的,和后面mycat中的配置保持一致

#设定ITEM表的增长方式为 步进为2 ,
insert into MYCAT_SEQUENCE (name,current_value,increment) values ('ITEM',0,2);
#查询结果
 select * from MYCAT_SEQUENCE;

在这里插入图片描述

3.接下来配置mycat,
配置schemal.xml
table 增加属性 autoIncrement=“true”

配置server.xml

需要修改sequnceHandlerType 为1,

<property name="sequnceHandlerType">1</property>

配置mycat/conf/sequence_db_conf.properties

#添加需要自增长的表名称
ITEM=node1

ITEM为数据库添加的表名,大写。node1是schemal.xml中的node节点名称,注意保持一致。

重启mycat即可。
连接上mycat :

insert into item(value,indate)values(10,'2020-3-14 12:12:12');

注意如果日期字段插入mysql函数now()是会报错的。
测试成功!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值