我们如何从任何MySQL-DB表中重用已删除的id?

时间:2010-04-13 12:15:16

标签: php mysql

我们如何重新使用任何MySQL-DB表中的已删除ID?

如果我要回滚已删除的ID,我们可以做到吗?

4 个答案:

答案 0 :(得分:4)

可能通过找到最低的未使用ID并强制它,但这是非常糟糕的做法,主要是因为引用完整性:例如,可能是来自其他表的关系指向已删除的记录,这不会如果重复使用ID,则可以被识别为“已删除”。

底线:不要这样做。这是一个非常糟糕的主意。

相关阅读:Using auto_increment in the mySQL manual

重新更新:即使您有正当理由这样做,我也不认为有一种自动方式可以在auto_increment字段中重复使用值。如果有的话,你必须找到最低的未使用值(可能使用存储过程或外部脚本)并强制它作为ID(如果可能的话)。

答案 1 :(得分:3)

你不应该这样做 不要把它想象成一个数字。
这不是一个数字。它是唯一的标识符。想想这个词 - unique 。不应使用相同的ID识别记录。

答案 2 :(得分:1)

1

根据您提供的解释“@Pekka,我正在跟踪INsert更新并删除查询...”我假设您只是想要将旧数据恢复到相同的ID。

在这种情况下,您可以考虑在表格中使用delete-flag列。

如果为某行设置了delete-flag,则应考虑将程序视为已删除。此外,您可以通过设置delete-flat(false)来使其可用。

类似的方法是将整行移动到某个临时表,并且可以在需要时使用相同的数据和ID将其恢复。

上一页。但是想法更好。

2

如果这不是你的解释所指的那个;并且您想要删除并仍然使用ID的所有值(自动生成);我有一些你可以实现的想法: - 创建用于存储已删除ID的表(IDSTORE)。 - 创建在行删除时激活的触发器,该触发器将记录ID并将其存储到表中。 - 插入时从IDSTORE获取最小ID并插入该值。如果IDSTORE为空,则可以传递NULL ID以生成自动增量编号。

当然,如果你实现了引用/关系(FK),你手动必须照顾它,因为你的要求是这样。

进一步阅读: http://www.databasejournal.com/features/mysql/article.php/10897_2201621_3/Deleting-Duplicate-Rows-in-a-MySQL-Database.htm

答案 3 :(得分:0)

这是我的mysql DB案例:

我有菜单表,并且菜单ID在内容表中用作外键。但是表之间没有直接关系(坏表设计,我知道但是该项目是由其他开发人员完成的,后来我的客户找我来处理它)。因此,有一天,我的客户意识到某些内容没有显示出来。我看了一下问题,发现菜单之一已从菜单表中删除,但幸运的是,菜单ID存在于内容表中。我从已删除的内容表中找到了菜单ID,然后对具有相同菜单ID以及其他字段的菜单表运行常规的插入查询。 (Id是主键)并且有效。

insert into tbl_menu(id, col1, col2, ...) values(12, val1, val2, ...)