AUTO_INCREMENT问题

水族杰纶 2015-06-02 01:07:09
[mysqld] #选项文件中设置
auto_increment_increment=4 #步长设置为4
现在四个库db_00 ~db_03
每个库里都有相同表user_account(id int auto_increment .......) innodb表
现在需求:
每个库中表步长都为4,my.cnf已经设置
每个库中的表user_count id列分别以下面方式增长
db_00 中user_count id列
10000 --起点
10004
db_01 中user_count id列
10001 --起点
10005
db_02 中user_count id列
10002 --起点
10006
db_03 中user_count id列
10003 --起点
10007

每个表分别设置了AUTO_INCREMENT 没有达到要求
请问为何?
...全文
285 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞啊子 2016-08-06
  • 打赏
  • 举报
回复
引用 15 楼 wufeng4552 的回复:
[quote=引用 13 楼 yangb0803 的回复:] 还是自己写一个唯一ID过程好了,呵呵
引用 14 楼 WWWWA 的回复:
如果没有设置 SET GLOBAL auto_increment_increment=3; ID是正常的,一旦设置,ID就出问题了,看看下个版本 能否解决此问题
目前已经改变策略 谢谢你们[/quote] 从数据库的设计上来看,一般情况是尽量按着步长去增长. 实际上大量并发插入时,ID自增值并不是连续的,性能才好。(假如步长为1)(数据库会保证唯一不保证连续)
水族杰纶 2015-06-03
  • 打赏
  • 举报
回复
引用 13 楼 yangb0803 的回复:
还是自己写一个唯一ID过程好了,呵呵
引用 14 楼 WWWWA 的回复:
如果没有设置 SET GLOBAL auto_increment_increment=3; ID是正常的,一旦设置,ID就出问题了,看看下个版本 能否解决此问题
目前已经改变策略 谢谢你们
WWWWA 2015-06-03
  • 打赏
  • 举报
回复
如果没有设置 SET GLOBAL auto_increment_increment=3; ID是正常的,一旦设置,ID就出问题了,看看下个版本 能否解决此问题
道玄希言 2015-06-02
  • 打赏
  • 举报
回复
还是自己写一个唯一ID过程好了,呵呵
水族杰纶 2015-06-02
  • 打赏
  • 举报
回复
引用 11 楼 ACMAIN_CHM 的回复:
看来是MYSQL本身的BUG。
如果真是这样 用在生产环境还是有点冒险的 必须要保证ID在所有表里唯一
ACMAIN_CHM 2015-06-02
  • 打赏
  • 举报
回复
看来是MYSQL本身的BUG。
水族杰纶 2015-06-02
  • 打赏
  • 举报
回复
引用 9 楼 WWWWA 的回复:
SET GLOBAL auto_increment_increment=3; DROP TABLE autoinc1; DROP TABLE autoinc2; DROP TABLE autoinc3; CREATE TABLE autoinc1(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,NAME VARCHAR(10)) AUTO_INCREMENT=1; CREATE TABLE autoinc2(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,NAME VARCHAR(10)) AUTO_INCREMENT=2; CREATE TABLE autoinc3(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,NAME VARCHAR(10)) AUTO_INCREMENT=3; SET SESSION auto_increment_offset=2; INSERT INTO autoinc2(`NAME`) VALUES('B'),('B'),('B'); SET SESSION auto_increment_offset=1; INSERT INTO autoinc1(`NAME`) VALUES('B'),('B'),('B'); SET SESSION auto_increment_offset=3; INSERT INTO autoinc3(`NAME`) VALUES('B'),('B'),('B'); SELECT * FROM autoinc1; SELECT * FROM autoinc2; SELECT * FROM autoinc3;
谢谢大侠 有个疑问 SET SESSION auto_increment_offset=2 第一次插入的时候 这个auto_increment_offset 就已经变成 4 后面 如果每次都这么设置 ID是怎么根据这个算出来的
WWWWA 2015-06-02
  • 打赏
  • 举报
回复
SET GLOBAL auto_increment_increment=3; DROP TABLE autoinc1; DROP TABLE autoinc2; DROP TABLE autoinc3; CREATE TABLE autoinc1(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,NAME VARCHAR(10)) AUTO_INCREMENT=1; CREATE TABLE autoinc2(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,NAME VARCHAR(10)) AUTO_INCREMENT=2; CREATE TABLE autoinc3(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,NAME VARCHAR(10)) AUTO_INCREMENT=3; SET SESSION auto_increment_offset=2; INSERT INTO autoinc2(`NAME`) VALUES('B'),('B'),('B'); SET SESSION auto_increment_offset=1; INSERT INTO autoinc1(`NAME`) VALUES('B'),('B'),('B'); SET SESSION auto_increment_offset=3; INSERT INTO autoinc3(`NAME`) VALUES('B'),('B'),('B'); SELECT * FROM autoinc1; SELECT * FROM autoinc2; SELECT * FROM autoinc3;
水族杰纶 2015-06-02
  • 打赏
  • 举报
回复
引用 7 楼 WWWWA 的回复:
mysql版本?表引擎是什么?
mysql5.6 innodb
WWWWA 2015-06-02
  • 打赏
  • 举报
回复
mysql版本?表引擎是什么?
水族杰纶 2015-06-02
  • 打赏
  • 举报
回复
引用 5 楼 WWWWA 的回复:
是修改已经存在记录的ID? 上述代码设置设置后,对新插入记录的ID有效
不是 我再说下我的需求吧 比如建立三张表 每张表里都有ID 自增的 步长都统一设置为3 每张表的ID起点不一样 create table autoinc1(id int not null auto_increment primary key,name varchar(10))auto_increment=1 create table autoinc2(id int not null auto_increment primary key,name varchar(10))auto_increment=2 create table autoinc3(id int not null auto_increment primary key,name varchar(10))auto_increment=3 我希望以后往这三张表插入数据后 ID 是互相不重复得 autoinc1 中的ID 以后应该是 1 4 7 autoinc2 中的ID 以后应该是 2 5 8 autoinc3 中的ID 以后应该是 3 6 9
WWWWA 2015-06-02
  • 打赏
  • 举报
回复
是修改已经存在记录的ID? 上述代码设置设置后,对新插入记录的ID有效
水族杰纶 2015-06-02
  • 打赏
  • 举报
回复
引用 3 楼 WWWWA 的回复:
SET @@auto_increment_increment=3;
这个似乎没啥效果
WWWWA 2015-06-02
  • 打赏
  • 举报
回复
SET @@auto_increment_increment=3;
水族杰纶 2015-06-02
  • 打赏
  • 举报
回复
引用 1 楼 ACMAIN_CHM 的回复:
没看明白,楼主想达到的效果是什么?
上面的不要看了 我重新描述吧 四张表 每张表有个自增列 现在的需求就是 步长都一样auto_increment_increment =3 每张表的auto_increment 期望的每张表中ID结果是 第一张表 1 4 7 10 ... 第二张表 2 5 8 1 1... 第三张表 3 6 9 12... mysql> create table autoinc1(id int not null auto_increment primary key,name varchar(10))auto_increment=1; mysql> create table autoinc2(id int not null auto_increment primary key,name varchar(10))auto_increment=2; mysql> create table autoinc3(id int not null auto_increment primary key,name varchar(10))auto_increment=3;
ACMAIN_CHM 2015-06-02
  • 打赏
  • 举报
回复
没看明白,楼主想达到的效果是什么?

56,822

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧