【问题标题】:Insert value into auto-inc/identity column higher than current auto-inc/identity value将值插入到高于当前 auto-inc/identity 值的 auto-inc/identity 列中
【发布时间】:2014-12-02 02:35:19
【问题描述】:

详情

我在 SE 或 MySQL 文档中找不到有关此问题的任何信息。

我遇到了一种情况,我可能需要插入一个高于当前值的 auto-inc 值。例如,auto-inc 列当前为 12,我需要插入一行,其中 auto-inc 字段为 15。

问题

1 - 如果我只是简单地进行此插入,一旦自动增量达到 15 是否会发生冲突,或者插入的下一个值是否会从 16 开始?有人告诉我后者是一个朋友的工作原理。然而,在文档中我发现了一个声明,它会导致它稍后发生冲突。这样做后我是否必须将表重新设置为 16?

2 - 在这种情况下,最佳做法是什么?

如果需要提供任何其他信息,请告诉我。

【问题讨论】:

  • 需要您修改主键的场景意味着您的应用程序设计有问题。如果您有 12 作为最后一个,则在这个世界上不存在您 必须 插入 15 作为 auto_increment 的场景。如果你得出了你必须这样做的结论或要求,你必须知道你做的事情非常错误,以至于将来会让你如此头疼,以至于你会诅咒你想出它的那一天。我建议您描述您的真正问题,而不是您想出的解决方案。
  • 我所说的问题就是我面临的问题。但是,您是对的 - 这是部署错误的结果。我们不小心部署了一个具有开发数据库配置的站点。现在我需要将数据库数据从开发传输到生产并保留关系。我知道如何简单地使用 id 的 null 插入数据等。我想知道我所描述的情况如何解决。
  • 1) 禁用标识,插入新值,将标识重新植入新的 High+ 生长因子 2) 最佳实践:改进质量保证/控制。不应该发生。
  • :/ 我知道.. 绝对是工作流程的问题。但是会发生什么,需要弄清楚。感谢您的意见!

标签: mysql auto-increment sql-insert


【解决方案1】:

据我所知,插入高于当前增量的值具有调整数据库中AUTO_INCREMENT 值的效果。也就是说,插入 20 会将其设置为 21。我相当肯定这种行为在较新版本的 MySQL 中是一致的。

您可以使用SHOW CREATE TABLE 查看当前增量。

【讨论】:

  • 谢谢!这是我想听到的。然而,我的朋友说了同样的话——“我认为/相当肯定”。由于这是关键任务,我想要更多的信心,因此到目前为止一整天都在研究!我们使用的是 MySQL 5.5。你有多自信?您找到资源了吗?我正在努力寻找有关此的文档。
  • 让我们这样说吧:我从未见过它在单主、非集群系统中表现得如此糟糕。如果您使用的是 multi-master、NDB 或任何外来的东西,那么所有的赌注都没有了。您可以尝试自己对此进行测试,以确保它在您的平台上运行。
  • Tadman,您能否就更大的问题也提供建议? dba.stackexchange.com/questions/78591/…
【解决方案2】:

刚刚试了一下。

1) auto-inc 将设置为 16,不会造成任何问题。

2) 我认为最好的做法是让 auto-inc 列单独工作,但我看不出不这样做有什么问题。但是,如果该列具有主键或唯一键,如果该值已在数据库中,则插入该列的值可能会导致问题。

希望对您有所帮助!

【讨论】:

  • 谢谢!对不起,但是 tadman 打败了你 :( 无论如何 + 1。可能对未来的观众了解哪个 MySQL 版本这样做很有用。该列是主键 auto-inc,因此所描述的问题应该不是问题。
  • 哈哈,不用担心,很高兴它有帮助。我使用 MySQL v5.6.20 但我真的不认为它取决于版本。如果您在主键列中使用它,请小心使用正确的值
猜你喜欢
  • 2011-12-30
  • 2015-01-02
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
  • 1970-01-01
  • 2020-03-31
  • 1970-01-01
  • 2011-08-12
相关资源
最近更新 更多