MySql自适应ID

Sn0wy

我有一个设置有自动递增ID的表。可以说我有ID 1、2、3、4和5。删除ID号3时,我希望ID 4降至3,ID 5降至4。

这可能吗?怎么做?

过滤器

我认为您想使记录ID保持顺序,并且它们之间不要有任何缝隙:)

这当然是可能的,但是您应该使自己远离此类解决方案。如果以后再开始将表彼此关联,您会后悔这个想法,并且疯狂地跟踪所有表的外部ID。

确实,在记录之间有漏洞确实不是一件坏事。同样,这就是实际的db逻辑的工作方式。使用ID后,就完成了。您将不再使用它。如果不存在,您将了解它已经消失了。与此相关的数据库将跟踪上次使用的编号(对于ID列),并自动递增而不是最后一个现有记录的ID,而是自动递增最后一个使用的记录的ID。

简而言之,您可以。但是你不会想要的。

我故意没有解释它是如何完成的。在此之前,请确保这是OP真正想要的。

至于OP的评论,It is what I really want :) There will be no other tables connected to it.我可以想到一个不需要任何数据库交互的简单解决方案,因为OP现在承担了责任。

创建没有自动递增ID字段的表。您的ID字段应为int类型。创建记录时,通过排序ID desc(从大到小)并从中获取,TOP 1表中获取最后一个ID 您的请求的示例查询:

SELECT TOP 1 ID FROM Table ORDER BY ID DESC

在新的INSERT查询中使用结果+ 1。

删除值时,应遍历所有记录并在for循环中逐一更新其ID。这意味着,如果您有成千上万的记录,并且没有使用数据库系统的内部功能(在这里不能使用,因为您使用的是自己的逻辑),则可能要花一些时间(警告您!)。也就是说,如果您与其他表没有任何关系。如果这样做,则必须对相关表重复该迭代,以保留外部ID关系(数据库不再维护该关系)。因为,通过违反DB的内部逻辑,您可以控制一切,现在,您有责任跟踪和修改自己的所有内容。我是否提到您不能在任何相关表中使用“身份”列,因为它不允许您将ID更改为其中不存在的ID。

如您所见,这是一个痛苦的过程,应避免。在您了解真正发生的事情之前,有些事情可能根本没有意义。但是相信我,我们都去过那里。这些系统的构建背后具有逻辑。无需重新发明轮子。当有人告诉您不要去那里时,您可能会认真考虑一下。:)

祝你好运!

编辑:删除记录时,您应该使用服务器端代码来获取和更新每一行。这是逻辑。获取表行的总数。在循环外部创建一个全局变量,并在循环内部对您的get请求进行递增计数。开始循环(具有行总数的长度)。您从底部开始(从ID为1的第一行开始)。如果get请求的结果为空,则控制每一行。如果为空,请跳过并继续。直到找到真实的记录。当您获取它时,通过向数据库发送INSERT查询,立即使用您在循环外创建的全局变量更新其ID。您的循环将使用该逻辑完成每一行,并完成了。

我从来没有写过这类详细的答案,除了OP之外没有其他帮助。但是你很幸运。阅读此注意事项,不要忘记从现在起您就一个人了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章