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()是會報錯的。
測試成功!