MySQL自增主键每次增加10

8
在 Azure 上,我创建了一个新的 MySQL 数据库实例。在这个数据库中,我使用以下脚本创建了一个表格:
CREATE TABLE ROLES(
  ID INTEGER PRIMARY KEY AUTO_INCREMENT,
  ROLE_NAME VARCHAR(30) NOT NULL
);

然后我使用这个脚本插入值:
INSERT INTO `beezzy`.`roles` (`ROLE_NAME`) VALUES ('admin');
INSERT INTO `beezzy`.`roles` (`ROLE_NAME`) VALUES ('owner');
INSERT INTO `beezzy`.`roles` (`ROLE_NAME`) VALUES ('consultant');

执行后,表格包含以下行:

enter image description here

为什么数据库生成像“11”和“21”这样的ID?我在本地机器上运行相同的脚本,一切正常。ID是“1”,“2”,“3”。


请查看我的答案中的编辑更多部分。@OlehKurpiak - 1000111
2个回答

7
请执行以下查询: SELECT @@auto_increment_increment 如果该值大于1,则通过以下查询将其设置为1SET @@auto_increment_increment=1; 注意:此更改仅对当前连接可见。
编辑:
为了全局设置,以便其他连接也可以看到更改,您需要对全局和会话进行设置。
SET @@GLOBAL.auto_increment_increment = 1;

SET @@SESSION.auto_increment_increment = 1;

其他连接现在可以看到这个更改。

更多:

如果重新启动MySQL服务器,此值将被重置。为了使此更改永久生效,您需要在[mysqld]部分下写入此变量,以在my.cnf [适用于Linux]my.ini [适用于Windows]文件中保留此更改。

[mysqld]
auto-increment-increment = 1

谢谢。这对我很有帮助 :) - Oleh Kurpiak
1
欢迎您。但是您也应该查看clear db faqs。Peter已经指出了原因。@OlehKurpiak - 1000111

6
您的自增值可能是10,但这可能是故意设计的。Azure使用ClearDB,它使用自增10,原因是复制。
当我在数据库中使用auto_increment键(或序列)时,它们会以不同的偏移量增加10。为什么?
ClearDB使用循环复制来提供主-主MySQL支持。因此,某些事情,例如auto_increment键(或序列),必须进行配置,以便一个主机不使用另一个主机相同的键,在所有情况下。我们通过配置MySQL跳过某些键,并强制MySQL对每个使用的键使用特定的偏移量来实现这一点。我们之所以使用10而不是2的原因是为了未来的发展。
您不应更改autoincrement值。 cleardb faq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接