sql数据库设置自动增长(这几个方法可以解决)
来源: 江南一点雨
问题
主键自增这应该算是一个非常常见的需求,在单机数据库中,这个需求一个 auto_increment就能实现,但是在数据库集群中,这个需求却变复杂了,因为存在多个数据库实例 ,各自都是主键自增,合在一起就不是主键自增了。
最简单的思路
最简单的办法莫过于通过设置主键自增的步长和起始偏移量来处理这个问题。默认情况下,主键自增步长为 1 ,如果我们有三个数据库实例,我们可以将主键自增步长设置为 3 ,这样对于第一个数据库实例而言,主键自增就是 1、4、7、10…,对于第二个数据库实例而言,主键自增就是 2、5、8、11…,对于第三个数据库实例而言,主键自增就是 3、6、9、12….。
MSSQL 可以直接在 SQL 中指定主键的自增步长和起始偏移量,但是 MySQL 则需要修改数据库配置才能实现,因此这里不推荐使用这种方式。
MyCat 的办法
MyCat 作为一个分布式数据库中间,屏蔽了数据库集群的操作,让我们操作数据库集群就像操作单机版数据库一样,对于主键自增,它有自己的方案:
- 通过本地文件实现
- 通过数据库实现
- 通过本地时间戳实现
- 通过分布式 ZK ID 生成器实现
- 通过 ZK 递增方式实现
今天我们就先来看看看如何通过 ZK 递增的方式实现主键全局自增。
配置步骤如下:
- 首先修改主键自增方式为 4 ,4 表示使用 zookeeper 实现主键自增。
server.xml
- 配置表自增,并且设置主键
schema.xml
设置主键自增,并且设置主键为 id 。
- 配置 zookeeper 的信息
在 myid.properties 中配置 zookeeper 信息:
- 配置要自增的表
sequence_conf.properties
注意,这里表名字要大写。
- TABLE.MINID 某线程当前区间内最小值
- TABLE.MAXID 某线程当前区间内最大值
- TABLE.CURID 某线程当前区间内当前值
- 文件配置的MAXID以及MINID决定每次取得区间,这个对于每个线程或者进程都有效
- 文件中的这三个属性配置只对第一个进程的第一个线程有效,其他线程和进程会动态读取 ZK
- 重启 MyCat 测试
最后重启 MyCat ,删掉之前创建的表,然后创建新表进行测试即可。
好了,本文主要向大家介绍了 MyCat 实现主键全局自增的方案。不知道大家有没有 GET 到呢?有问题欢迎留言讨论。
需要的Java架构师方面的资料可以关注之后私信哈,回复“资料”领取免费架构视频资料,记得要点赞转发噢!!!
- 单招专业哪些学校有(你知道多少)
- 炒腊肉川菜正宗做法(#巨下饭的家常菜#连下三碗饭的尖椒炒腊肉)
- 孔子姓谁(连自己的姓氏都搞不懂)
- 广州看花的旅游景点推荐一下(广州这6个赏花地)
- 北方臭豆腐的酱汁制作(附秘制酱汁配方)
- 手把手教你插花(手把手教你)
- 香港实际面积有多大(面积约300公里)
- 网红提拉米苏的做法(无需烤箱)
- 机油5w30和5w40是什么区别(老司机说)
- 开海鲜店吸引人的方法(让一家海鲜餐馆快速收入50万)
- 职业打假人怎么威胁淘宝卖家的(律师、淘宝小二)
- 为什么暹罗猫是黑色的(暹罗猫变黑的原因)
- 电子表格怎么插入照片(我需要2小时)
- 转正述职开场白和结尾(移动公司临时工转正述职演讲稿)
- 如何查看自己注册多少个邮箱(在线查询你的手机号/邮箱号在哪些网站注册过的方法)
- 苹果手机碰一下就亮了怎么调(苹果13关闭轻点亮屏方法分享)
- 银水杯喝水的好处(你都知道吗)
- c盘文件夹删不掉怎么办(教你彻底删除C盘的顽固文件)