mycat配置ER表与全局序列

本文详细介绍了在Mycat分布式数据库中遇到的插入数据报错问题,问题根源在于表名大小写的敏感性。通过将表名改为小写解决了该问题。同时,展示了如何配置全局序列,包括创建序列表、序列函数,并在server.xml中配置sequenceHandlerType。此外,还演示了为表设置初始值、添加主键与自动增长属性的方法,以及如何手动调整序列值。最后,给出了两种不同的插入数据方式。
摘要由CSDN通过智能技术生成

三个表的结构如下
在这里插入图片描述

向子表插入数据出现如下报错。

mycat:can't find (root) parent sharding node for sql

试了好久发现是表名的问题,原来是 Student,SC,Course,统一改成小写 student,sc,course就没有错了。
采用数据库方式进行全局序列的配置

使用其中一个dn来创建相应表与相应函数,这里使用dn1

建表
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;

创建函数

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 ;

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 ;

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 ;

配置server.xml

<property name="sequnceHandlerType">1</property>

为表设置初值

insert into MYCAT_SEQUENCE(name,current value,increment)  values('STUDENT',1,1);

在sequence_db_conf.propersites中添加STUDENT=dn1

为student表添加主键与autoIncrement,此时插入时自动加1的属性即为primaryKey的属性。

<table name="student"   primaryKey='id' dataNode="dn1,dn2" rule="mod-long" autoIncrement="true">

两种插入方式

insert into student(sno,sname,dno) values(63,'E',1);
	
insert into student(id,sno,sname,dno) values(next value for  MYCATSEQ_STUDENT,64,'F',2);

如果想要手动调整id值
则需使用dn1对应的数据库中的MYCAT_SEQUENCE表执行

update table student set id=1 where name=STUDENT; 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值