-
在mycat conf目录下的sequence_db_conf.properties文件中添加如下内容:
#sequence stored in datanode GLOBAL=dn1 COMPANY=dn1 CUSTOMER=dn1 # 配置此项为你存放mycat_sequence表和函数的节点 ORDERS=dn1
dn1是你在schema.xml文件中的节点对应的数据库
-
修改Mycat配置文件server.xml
<property name="sequnceHandlerType">1</property>
1代表数据库模式,推荐此模式
-
在dn1节点的 orderdb1 数据库中添加 MYCAT_SEQUENCE表
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;
-
在dn1节点的 orderdb1数据库中的 MYCAT_SEQUENCE 表插入sequence初始记录
INSERT INTO MYCAT_SEQUENCE(name,current_value,increment) VALUES ('ORDERS', -99, 100);
代表插入了一个名为mycat的sequence,当前值为-99,步长为100。此处的ORDERS要和sequence_db_conf.properties文件中配置的一致
-
在dn1节点的 orderdb1数据库中创建存储过程
- 获取当前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 ;
获取全局id的配置已经准备完毕。
- 获取当前sequence的值:
-
调用
-- 建表 create table test(id int,name varchar(10)); -- 插入数据 MYCATSEQ_ORDERS 这个ORDERS就代表之前配置的那个变量 insert into test(id,name) values(next value for MYCATSEQ_ORDERS,(select database()));
十三、Mycat-全局序列
最新推荐文章于 2022-07-04 14:24:02 发布