本次實驗 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 權威指南