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 权威指南

相关文章
相关标签/搜索