mycat全局序列号
1、全局序列化
1) Mycat支持的全局序列化主要包括 本地文件方式,数据库方式,本地时间戳方式。实际生产环境,建议还是使用数据库方式。
2)数据库方式配置
1、<system><property name="sequnceHandlerType">1</property></system>
其中0代表本地文件方式,1代表数据库方式,2代表时间戳方式。
2、创建 MYCAT_SEQUENCE表
2、创建 MYCAT_SEQUENCE表
CREATE TABLE `MYCAT_SEQUENCE` (
`name` varchar(50) NOT NULL,
`current_value` int(11) NOT NULL,
`increment` int(11) NOT NULL DEFAULT \'100\',
PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
然后插入一条记录
insert into MYCAT_SEQUENCE (\'name\',\'current_value\',\'increment\') values (\'GLOBAL\',10000,100);
insert into MYCAT_SEQUENCE (\'name\',\'current_value\',\'increment\') values (\'ORDER\',10000,100);
不是在MYCAT_SEQUENCE增加了一条记录,,Mycat就会认这个序列化,而是必须在sequence_db_conf.properties
文件中,做好配置,
然后可以在语句中可以这样写
next value for MYCAT_SEQGLOBAL
next value for MYCAT_SEQORDER
创建三个函数:
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
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
CREATE FUNCTION mycat_seq_setval(p_seq_name VARCHAR (50),p_value INTEGER)
RETURNS varchar(64) CHARSET utf8
DETERMINISTIC
BEGIN
UPDATE MYCAT_SEQUENCE SET current_value = p_value WHERE NAME = p_seq_name;
RETURN mycat_seq_currval(seq_name);
END
3、在需要分片的表上,在SQL语句时,需要指定,类似于
insert into es_order( id,order_no ,其他字段) values ( next value for MYCATSEQ_GLOBAL,\'20160828161720001\',其他字段 )