【问题标题】:Mysql reset auto_increment not for new ids but for all (also old ids)Mysql 重置 auto_increment 不是针对新 id,而是针对所有(也包括旧 id)
【发布时间】:2011-10-23 13:53:19
【问题描述】:

大家好,是否有任何 SQL 函数可以重置所有 auto_increment id?

我的意思是,我有这种情况(id =1,id2 = 2,id3 =3)

一旦我删除 id 我想返回这种情况(id2 = 1,id3 = 2)等等。

我需要一个脚本来执行此操作吗?

【问题讨论】:

  • 您知道它会破坏其他表中的外键、指向您网站的链接等吗?
  • 我知道,但这只是一个幻灯片画廊表;)

标签: php mysql auto-increment


【解决方案1】:

您可以为整个表重置AUTO_INCREMENT

ALTER TABLE table AUTO_INCREMENT=1;

但是您不能真正返回来填充已删除的各个行中的值。 auto_increment 值旨在是唯一的,但如果发生删除或插入具有为 auto_increment 列设置的显式值的新行,则不能保证保持顺序。

如果您需要再次将它们修改为顺序,则必须在代码中完成,可能会遍历所有行并单独执行 UPDATE 语句。

【讨论】:

  • uhm .. 它不起作用,因为如果我的表从 6 开始,它不会更改为第一条记录,然后依次更改为其他记录:(
  • @memento 查看我的其余答案。 auto_increment 不能有效地用于保证顺序编号。这不是它的目的。
【解决方案2】:

Id 就是 Id,这意味着它必须永不改变!至少在良好的数据库设计方面。身份是你与生俱来的东西。

【讨论】:

  • 我不会说永远不会。您可以在 InnoDB 表中强制使用与 ON UPDATE CASCADE 的外键关系。
  • 我没有外键是唯一的记录,我以后不需要任何外键或更改;)
  • @Michael:是的,你可以这样做,但我认为你不应该因为许多其他原因。例如。 id 可以“超出”当前数据库(在其他数据库中,在 URLS 中,在其他版本的数据库中 - 例如,您提供给其他任何人的备份或副本),因此更改 id 时您会搞得一团糟并且可以运行当您遇到“以前版本的 ids”时遇到麻烦....
  • @both 请大家 :) 这是一个愚蠢的表 .. 我知道数据库优化,但我真的需要这个功能 :P ... 没有 sql 函数可以做到这一点?需要我脚本吗? :P 谢谢 ;)
  • @memento:您可能需要一个新列。创建一个新列,不要为此使用 id ! id 应该只是用于识别(而不是其他任何东西!),这就是为什么它被称为 id!
猜你喜欢
  • 2013-10-06
  • 2012-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
相关资源
最近更新 更多