2010-09-10 55 views
0

我想知道除了AUTO_INCREMENT之外,让表自动设置ID的最简单方法是什么。有没有简单的方法来保持MySQL行id不增长?

我有一张桌子,可以在很长一段时间内积累数千行。其中一些行将在稍后被删除。我如何获得新的行以获得最低的可用ID,而无需手动完成。

我可以在每次有人添加一行时重置AUTO_INCREMENT吗?

+2

你为什么要这样做?它可能很好地解决了以前对旧的,现在删除的数据的查询。 – BoltClock 2010-09-10 09:59:50

+1

我很好奇 - 为什么你需要连续的ID没有差距? – 2010-09-10 10:00:16

+0

你不应该那样做。这些问题应该在一些常见问题条件下被关闭。关于这样一个基本概念误解太多的讨论 – 2010-09-10 12:27:30

回答

0

它可以自动递增重置为下一个可能的ID:

ALTER TABLE table_name AUTO_INCREMENT = 1 

您甚至不必将它设置为下一个可用的关键。 MySQL将在下一次更新时自动采用下一个密钥。所以即使每次设置为“1”都是安全的。

但是,如果你不关心ID为什么你甚至使用ID?甚至大量的ID也不是问题。我得到了一张拥有超过2000万条目的表格,并且从来没有遇到问题。

+0

为什么人们总是在不解释他们的情况下就OP问题回答投票可能的答案? – 2ndkauboy 2010-09-10 12:30:54

+0

我投了你的回覆并标上正确的答案。我知道这很少需要,我应该通过其他方式解决,但开发人员必须知道不良做法才能避免它们。其他任何事情都是愚蠢的。 – Hubro 2010-09-10 19:06:47

+0

我需要这个的原因是,这个特定的表可能会接收到数百万行,但一次不一定包含数十或数百行。在这种情况下,看起来有点矫枉过正,以致数以百万计的ID。 但是,谢谢你的回复! – Hubro 2010-09-10 19:26:10

4

坦率地说,这是不值得的麻烦。我相信它是可能的,但它只是一天结束时的唯一标识符 - 无论它是1还是1000都无关紧要。

如果是出于其他目的,请考虑使用其他字段。

国际海事组织你不应该混淆索引。

2

不可能的,一个ID都是唯一的,使用一次..

仅当您清空表。

+1

这是错误的。它只能同时使用一次,但如果您删除了一个条目,它可能会再次使用。 – 2ndkauboy 2010-09-10 12:11:29

+0

right @ Kau-Boy :) – 2010-09-10 12:16:05

+0

@Kau不,你错了。如果一个人的孩子会死,而他们又生了另一个孩子,那么即使以第一个名字命名,它仍然是另一个孩子。你误解了独特的识别概念。 – 2010-09-10 12:24:15

1

谁在乎?一个integer可以有数十亿的唯一值,它们都花费相同数量的内存(每个4字节)。用主键赌博就像俄罗斯轮盘赌到你的数据库:最后你的数据库会死(它被损坏)。

0

我想你可以使用触发器,但这可能会在一段时间后变成一个巨大的混乱。不明白你为什么不想使用auto_increment,你有什么特别的原因吗?

Triggers in MySQL 5.0

@Jordy:你这话并不尽然,是只有一个行可以有,在任何给定的点值,但是如果你删除行仍可以重用针对另一行删除值。您也可以将计数器重置为任意值,包括增量而不删除表格。

相关问题