mycat分表自增 db实现


CREATE TABLE TEST_SEQUENCE (name VARCHAR(50) NOT NULL,current_value INT NOT

NULL,increment INT NOT NULL DEFAULT 1, PRIMARY KEY(name)) ENGINE=InnoDB;


increment为步长

name为逻辑表名


插入数据

INSERT INTO `TEST_SEQUENCE` (`name`, `current_value`, `increment`)
VALUES
('NIGGERS', 1002, 1);

对应逻辑表NIGGERS


mysql functions:

/* 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 TEST_SEQUENCE
SET current_value = current_value + increment WHERE name = seq_name; RETURN mycat_seq_currval(seq_name);
END ;;
DELIMITER ;; */

/* DELIMITER ;;
CREATE FUNCTION mycat_seq_setval(seq_name VARCHAR(50),value INTEGER) RETURNS varchar(64)
CHARSET utf8 DETERMINISTIC
BEGIN
UPDATE TEST_SEQUENCE
SET current_value = value
WHERE name = seq_name;
RETURN mycat_seq_currval(seq_name); END ;;
DELIMITER ;; */


/* 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
TEST_SEQUENCE WHERE name = seq_name; RETURN retval;
END ;;
DELIMITER ;; */

配置:

server.xml

<property name="sequnceHandlerType">1</property> 2是时间戳方式

scheme.xml

<table name="niggers" autoIncrement="true" primaryKey="id" subTables="niggers$1-3" dataNode="test" rule="mod-long"></table>
<table name="test_sequence" primaryKey="name" dataNode="test"></table>

sequence_db_conf.xml

NIGGERS=test

逻辑表名=节点



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值