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()是会报错的。
测试成功!