mycat配置全局系列号,采用db方式

先要在对应datanode节点上创建相关表(我这里用的是dn1):

#创建表
CREATE TABLE MYCAT_SEQUENCE (
   name VARCHAR (50) NOT NULL comment  "名称",
   current_value INT NOT NULL  comment  "当前值",
   increment INT NOT NULL DEFAULT 100  comment  "步长",
   PRIMARY KEY (name)
) ENGINE = INNODB;

#插入对应自增长表
insert into MYCAT_SEQUENCE(name,current_value,increment) values('T_USER',19,5);



#取当前squence的值
DROP FUNCTION IF EXISTS mycat_seq_currval;
DELIMITER $$
CREATE FUNCTION mycat_seq_currval(seq_name VARCHAR(50))RETURNS VARCHAR(64) CHARSET 'utf8'
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'
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'
BEGIN
UPDATE MYCAT_SEQUENCE SET current_value = current_value + increment 
WHERE NAME = seq_name;
RETURN mycat_seq_currval(seq_name);
END$$
DELIMITER ;
修改数据库my.cnf:

数据库配置文件修改my.ini

log_bin_trust_function_creators=1
# 忽略大小写
lower_case_table_names=1
修改schema.xml:(添加主键和自增长配置primarykey和autoIncrement属性 )





	 
		 
	 
		select user()
		 
	

修改sequence_db_conf.properties: 
  

注意对应shcema.xml中table的表名要大写,我这里是T_USER, 对应创建sequence表和存储函数的节点是dn1.

#sequence stored in datanode
GLOBAL=dn1
T_USER=dn1
CUSTOMER=dn1
ORDERS=dn1
进入mycat客户端,插入数据:

insert into t_user(userName,age,createTime,updateTime) values('tanlei2',23,now(),now());

查询数据会发现该条数据id已经自增长:

select * from t_user;

不过我们线上id都是用一个只有一列主键自增长id的表维护的!





你可能感兴趣的:(mycat,主键,自增长,mycat)