mycat 自增主键配置

转载自:https://www.cnblogs.com/raphael5200/p/5900007.html

以下只记录步骤,方便以后查看。

数据库方式:

1.修改mycat目录下conf目录中的server.xml文件

# 其中1,表示使用数据库方式。
<system>
    <property name="sequnceHandlerType">1</property>
</system>

2.在其中一个数据节点(dataHost)中创建相应的表和存储过程

注意:是登录到mysql数据库中执行,而不是在mycat中

可以在linux系统中的mysql的bin目录下启动数据库后执行

./mysql -u root -p

也可以通过Navicat工具在对应的数据库中执行

--  创建MYCAT_SEQUENCE表
CREATE TABLE MYCAT_SEQUENCE (
`name` VARCHAR(50) NOT NULL,
current_value INT NOT NULL,
increment INT NOT NULL DEFAULT 1,
remark varchar(100),  -- remark 并不是必须的,在这里我是为了让每一个表都对应一个全局的自增,在Remark中配置自增项对应的表名。方便后期维护
PRIMARY KEY(name)) ENGINE=InnoDB;
-- – 获取当前sequence的值(返回当前值,增量)
DROP FUNCTION IF EXISTS `mycat_seq_currval`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `mycat_seq_currval`(seq_name VARCHAR(50)) RETURNS varchar(64) CHARSET latin1
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 ;
 
-- 设置sequence值
DROP FUNCTION IF EXISTS `mycat_seq_nextval`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `mycat_seq_nextval`(seq_name VARCHAR(50)) RETURNS varchar(64) CHARSET latin1
DETERMINISTIC
BEGIN
UPDATE MYCAT_SEQUENCE
SET current_value = current_value + increment WHERE name = seq_name;
RETURN mycat_seq_currval(seq_name);
END
;;
DELIMITER ;
-- 获取下一个sequence值
DROP FUNCTION IF EXISTS `mycat_seq_setval`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `mycat_seq_setval`(seq_name VARCHAR(50), value INTEGER) RETURNS varchar(64) CHARSET latin1
DETERMINISTIC
BEGIN
UPDATE MYCAT_SEQUENCE
SET current_value = value
WHERE name = seq_name;
RETURN mycat_seq_currval(seq_name);
END
;;
DELIMITER ; 

3.向表中插入数据

-- 插入sequence记录
INSERT INTO MYCAT_SEQUENCE(name,current_value,increment,remark) VALUES ('DICT', 1, 100,'match:tb_dic');
 
INSERT INTO MYCAT_SEQUENCE(name,current_value,increment,remark) VALUES ('GLOBAL', 1, 100,'GLOBAL');
-- 代表插入了一个名为mycat的sequence,当前值为1,步长为100。

其中curret_value为自增列的当前值,第一次可以可以理解为初始值,increment为每次增加的大小

前两条我没搞懂有啥用,然后添加自己的表数据,如我有一个mycat_book表,则需要在表中添加:

INSERT INTO MYCAT_SEQUENCE(name,current_value,increment,remark) VALUES ('MYCAT_BOOK', 1, 1,'MYCAT_BOOK');
--name:需要调用自增的主键的列 current_value:自增主键当前值 increment:每次增加的值

4、设置 sequence_db_conf.properties文件

该文件在linux系统中mycat目录下conf目录中

vim sequence_db_conf.properties

修改内容为:

#sequence stored in datanode
GLOBAL=dn1
COMPANY=dn1
CUSTOMER=dn1
ORDERS=dn1
DICT=dn1 #创建的表中缺少的字段
MYCAT_BOOK=dn1 #自己的表名(大写)= dataHost名称

5、设置schema.xml文件

 <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
            <table name="mycat_book" primaryKey="id" autoIncrement="true"
                   dataNode="dn1" rule="mod-long" />
        
</schema>

#主要是添加自增属性 autoIncrement 和 primaryKey

到此为止就算配置完了,向mycat中映射的虚拟表添加数据就会生成对应的自增主键了,必须是MYCAT_SEQUENCE 表中配置过的表,sequence_db_conf.properties文件中也得对应

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值