MyCat 全局序列號配置(數據庫方式)

本次實驗 MyCat Scheme.xml 文件以下
sql

本次實驗將 MyCat 全局序列號配置在 dn3 節點上面
數據庫

修改 server.xml配置:函數

<system><property name="sequnceHandlerType">1</property></system>測試

注:sequnceHandlerType 須要配置爲1,表示使用數據庫方式生成sequence.spa


修改 sequence_db_conf.properties 配置:code

配置文件中 GLOBAL=dn3 (GLOBAL 爲全局序列的名稱,dn3 表示節點)server


執行如下 SQL 建立全局 sequence 須要的表,並初始化數據(在 dn3 節點上)xml

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);  -- 注意這裏的 GLOBAL 要大寫,對應上 sequence_db_conf.properties 的配置


建立如下函數 (在 dn3 節點上)rem

-- 獲取當前sequence的值 (返回當前值,增量)
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 ;
-- 設置sequence值
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 ;
-- 獲取下一個sequence值
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 ;

測試 sequenceinnodb

-- 測試 sequence
insert into t_person(id, name) values(next value for MYCATSEQ_GLOBAL, 'test');


更詳細的內容請參考 MyCat 權威指南

相關文章
相關標籤/搜索