设置Mycat主键自增且唯一(非本地文件OR时间戳方式)

本文详细介绍了如何通过数据库方法设置Mycat主键自增且唯一。首先在server.xml中配置sequenceHandlerType为1,然后在schema.xml中定义表和分节点,并创建对应的存储过程。接着在数据库中插入sequence记录,最后更新sequence_db_conf.properties文件并重启或刷新Mycat配置。确保所有步骤正确无误,以实现主键的自动增长和唯一性。
摘要由CSDN通过智能技术生成

设置Mycat主键自增且唯一(数据库方法)

本文仅考虑使用数据库方式进行主键自增

1、配置server.xml

# 其中1,表示使用数据库方式,0为使用本地文件方式,2为使用时间戳形式。
<system>
    <property name="sequnceHandlerType">1</property>
</system>

2、配置schema.xml并在某个分节点中建立表和存储过程

2.1
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	<schema name="test_all" checkSQLschema="false" sqlMaxLimit="200" dataNode="t1">
            	<table name="cable_temperature_monitor_data" primaryKey="id" autoIncrement="true" dataNode="t1,t2" rule="sharding-by-date"/>
	</schema>

	<dataNode name="t1" dataHost="mysql1" database="test1" />
	<dataNode name="t2" dataHost="mysql1" database="test2" />
......省略
</mycat:schema>

2.2 建立表和存储过程

需要登录到真实数据库中进行创建,而不是在mycat中

(我这里在test1数据库中建立)

在这里插入图片描述

建立表

--  创建MYCAT_SEQUENCE表
CREATE TABLE MYCAT_SEQUENCE ( `name` VARCHAR(50) NOT NULL, current_value INT NOT NULL, increment INT NOT NULL DEFAULT 1, PRIMARY KEY(name)) ENGINE=InnoDB;

建立存储过程

-- – 获取当前sequence的值(返回当前值,增量)
DROP FUNCTION IF EXISTS `mycat_seq_currval`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `mycat_seq_currval`(seq_name VARCHAR(50)) RETURNS varchar(64) CHARSET latin1
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_nextval`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `mycat_seq_nextval`(seq_name VARCHAR(50)) RETURNS varchar(64) CHARSET latin1
DETERMINISTIC
BEGIN
UPDATE MYCAT_SEQUENCE
SET current_value = current_value + increment WHERE name = seq_name;
RETURN mycat_seq_currval(seq_name);
END
;;
DELIMITER ;

-- 获取下一个sequence值
DROP FUNCTION IF EXISTS `mycat_seq_setval`;
DELIMITER ;;
CREATE DEFINER=`root`@`%` FUNCTION `mycat_seq_setval`(seq_name VARCHAR(50), value INTEGER) RETURNS varchar(64) CHARSET latin1
DETERMINISTIC
BEGIN
UPDATE MYCAT_SEQUENCE
SET current_value = value
WHERE name = seq_name;
RETURN mycat_seq_currval(seq_name);
END
;;
DELIMITER ; 
2.3 插入记录

关键!!

-- 插入sequence记录,这里插入的是需要进行自增操作的表,必须大写!!!必须大写!!必须大写!
INSERT INTO MYCAT_SEQUENCE(name,current_value,increment) VALUES ('CABLE_TEMPERATURE_MONITOR_DATA', 0, 1);
 
INSERT INTO MYCAT_SEQUENCE(name,current_value,increment) VALUES ('GLOBAL', 1, 100);
-- 代表插入了一个名为mycat的sequence,当前值为1,步长为100。

3、设置 sequence_db_conf.properties文件

位置与server.xml、schema.xml等文件同一目录下

#sequence stored in datanode
GLOBAL=t1
CABLE_TEMPERATURE_MONITOR_DATA=t1
# 前者为你需要自增的表(与之前添加数据同名),后者为建立MYCAT_SEQUENCE表的真实数据库

4、重启mycat或刷新mycat配置文件

重启略。。。

刷新配置

# 9066为mycat管理端口
mysql -u root -p -P 9066 -h 127.0.0.1
mysql> reload @@config;

5、报错

检查配置文件,主要检查sequence_db_conf.properties

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值