返回顶部
首页 > 资讯 > 数据库 >MyCat教程六:全局序列号-全局主键的自增长
  • 602
分享到

MyCat教程六:全局序列号-全局主键的自增长

MyCat教程六:全局序列号-全局主键的自增长 2016-04-17 14:04:08 602人浏览 绘本
摘要

  前面我们介绍了MyCat的分库分表操作,那么同一张表中的数据会被保存在不同的数据库中,那么这就涉及到了主键维护的问题,此时肯定不能使用单个数据库中id自增的方式来处理了,这时我们就可以通过MyCat中提供的几种增长的方式来实现 全局

  前面我们介绍了MyCat的分库分表操作,那么同一张表中的数据会被保存在不同的数据库中,那么这就涉及到了主键维护的问题,此时肯定不能使用单个数据库中id自增的方式来处理了,这时我们就可以通过MyCat中提供的几种增长的方式来实现

全局主键自增

一、本地文件自增方式

  首先我们来看下第一种方式,也就是本地文件自增方式

1. 修改分片策略

  我们原来配置的分片策略crc32slot是不支持主键自增的,所以我们需要修改为auto-sharding-long

在这里插入图片描述

2. 修改server.xml文件

  server.xml文件中的sequnceHandlerType是用来配置主键生成类型的

sequnceHandlerType值 说明
0 本地文件自增方式
1 数据库自增方式
2 本地时间戳自增方式

所以我们需要先把sequnceHandlerType的值修改为0

在这里插入图片描述

3.sequence_conf.properties介绍

  在conf目录下的sequence_conf.properties 中有序列的相关配置信息

#Wed Oct 16 07:40:44 CST 2019
COMPANY.MAXID=2000
GLOBAL.MAXID=20000
COMPANY.HISIDS=
CUSTOMER.MAXID=2000
HOTNEWS.CURID=1000
ORDER.MINID=1001
CUSTOMER.HISIDS=
HOTNEWS.MINID=1001
GLOBAL.CURID=10002
ORDER.MAXID=2000
COMPANY.CURID=1000
CUSTOMER.CURID=1000
COMPANY.MINID=1001
GLOBAL.MINID=10001
HOTNEWS.MAXID=2000
CUSTOMER.MINID=1001
GLOBAL.HISIDS=
HOTNEWS.HISIDS=
ORDER.HISIDS=
ORDER.CURID=1000
 

主要的是GLOBAL.MAXID=20000 GLOBAL.CURID=10002 GLOBAL.MINID=10001 可以自行设置

4.测试实现

插入语句中主键字段用next value for MYCATSEQ_GLOBAL 替代

 insert into t_user(id,name,age)values(next value for MYCATSEQ_GLOBAL,"HG-93",23)
 

 

二、本地时间戳自增方式

 使用时间戳的方式,我们不需要分配策略或者选择其他的分片策略。

在这里插入图片描述

在这里插入图片描述

1.修改server.xml文件

  将server.xml文件中的sequnceHandlerType修改为2

在这里插入图片描述

2.重启mycat

  修改了配置文件,要让其生效需重启服务。

在这里插入图片描述

3.插入数据测试

 insert into t_user(id,name,age)values(next value for MYCATSEQ_GLOBAL,"HG-93",23)
 

时间戳太长将id修改为 varchar类型。

在这里插入图片描述

生成成功~

三、数据库自增方式

1.创建序列表和相关函数

  第三种方式是在Mycat所管理的某个数据库中创建一张自增的表结构来维护相关的数据,相关的脚本官方提供的有,如下:

DROP TABLE IF EXISTS MYCAT_SEQUENCE;
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 ;
INSERT INTO MYCAT_SEQUENCE(NAME,current_value,increment) VALUES ("GLOBAL", 100000, 100);
DROP FUNCTioN IF EXISTS `mycat_seq_currval`;
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 ;
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 MYCAT_SEQUENCE  
                 SET current_value = current_value + increment 
                  WHERE NAME = seq_name;  
         RETURN mycat_seq_currval(seq_name);  
END
;;
DELIMITER ;
DROP FUNCTION IF EXISTS `mycat_seq_setval`;
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 ;
 

我们把这些脚本在demo2上执行

在这里插入图片描述

2.修改server.xml

在这里插入图片描述

3.修改sequence_db_conf.properties文件

  因为demo2对应的逻辑库是 dn2所以我们需要修改此处

在这里插入图片描述

4.测试

  重启服务并插入数据测试

在这里插入图片描述

 insert into t_user(id,name,age)values(next value for MYCATSEQ_GLOBAL,"hg-93",23)
 

 

主键的生成成功,除了这三种方式以外还可以通过`ZooKeeper`来维护自增的主键,这个可以自行实现


关注微信公众号【程序员的梦想】,专注于Java,SpringBoot,SpringCloud,微服务,Docker以及前后端分离等全栈技术。

您可能感兴趣的文档:

--结束END--

本文标题: MyCat教程六:全局序列号-全局主键的自增长

本文链接: https://lsjlt.com/news/1986.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MyCat教程六:全局序列号-全局主键的自增长
      前面我们介绍了MyCat的分库分表操作,那么同一张表中的数据会被保存在不同的数据库中,那么这就涉及到了主键维护的问题,此时肯定不能使用单个数据库中id自增的方式来处理了,这时我们就可以通过MyCat中提供的几种增长的方式来实现 全局...
    99+
    2016-04-17
    MyCat教程六:全局序列号-全局主键的自增长
  • mycat分片表全局自增主键测试
    mycat分片表全局自增主键测试mycat分片表全局自增主键测试一、全局序列号介绍在实现分库分表的情况下,数据库自增主键已无法保证自增主键的全局唯一。为此,MyCat 提供了全局 sequence...
    99+
    2024-04-02
  • Mycat的使用 - 03.全局序列号
    02配置篇说到tb1表按照主键id进行了分片, 实际工作中还会经常按业务字段分片, 这次有tb3表, 按user_id分片, 依上文思路, 先调整下涉及到的配置文件.1. 在schema.xml中, 添加t...
    99+
    2024-04-02
  • MyCat 中怎么实现一个全局序列号
    这期内容当中小编将会给大家带来有关MyCat 中怎么实现一个全局序列号,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1. 本地文件方式原理:此方式 MyCAT 将 seq...
    99+
    2024-04-02
  • Android sqlite设置主键自增长的方法教程
    今天在APP中增加一个添加项目的功能,项目的主键为整数,要让它自增长。既然要自增长,那么在代码里面就不用给id字段赋值。但是调试的时候发现不行,提示主键重复,观察了输出,不赋值的话,id默认为0,于是每次都为0,就重复了:Source so...
    99+
    2023-05-31
    android sqlite 主键自增长
  • 小程序自定义组件全局样式不生效的解决方法
    目录太长不看版 组件样式隔离 demo 试验 优先级 页面的隔离配置参考资料在使用原生框架开发小程序时遇到一个问题,在 app.wxss 中定义的全局样式在自定义组件中不生效。后来发...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作