【问题标题】:MySQL Auto increment primary key increases by 10MySQL自动增量主键增加10
【发布时间】:2016-03-10 06:25:13
【问题描述】:

在 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');

执行后表包含这样的行:

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

【问题讨论】:

  • 请看我回答的 EDITMORE 部分。 @OlehKurpiak

标签: mysql azure


【解决方案1】:

请运行以下查询。

SELECT @@auto_increment_increment

如果值大于 1,则通过以下查询将其设置为 1

SET @@auto_increment_increment=1;

注意:此更改仅对当前连接可见。

编辑:

为了全局设置它以便其他连接也可以看到您需要为全局和会话设置它的更改。

SET @@GLOBAL.auto_increment_increment = 1;

SET @@SESSION.auto_increment_increment = 1;

所以其他连接现在可以看到这种变化。

更多:

如果您重新启动 MySQL 服务器,此值将被重置。为了使此更改永久生效,您需要在my.cnf [for linux]my.ini [for windows] 文件中的[mysqld] 部分下写入此变量。

[mysqld]
auto-increment-increment = 1

【讨论】:

  • 谢谢。这对我有帮助:)
  • 不客气。但你也应该通过clear db faqs。彼得已经指出了原因。 @OlehKurpiak
【解决方案2】:

您的自动增量可能是 10,但这可能是设计使然。 Azure 使用 ClearDB,它使用 10 的自动增量,原因是:即复制。

当我在我的数据库中使用 auto_increment 键(或序列)时,它们 以不同的偏移量递增 10。为什么?

ClearDB 使用循环复制来提供主-主 MySQL 支持。因此,某些东西,例如 auto_increment 键(或 序列)必须配置,以便一个主不使用 在所有情况下,与另一个相同的键。我们通过配置 MySQL 来做到这一点 跳过某些键,并通过强制 MySQL 使用特定的偏移量 对于使用的每个键。我们使用值 10 而不是 2 的原因是 为未来的发展。

您不应更改自动增量值。

cleardb faq

【讨论】:

    猜你喜欢
    • 2016-02-05
    • 2011-04-26
    • 2010-12-09
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 2012-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多