我想知道除了AUTO_INCREMENT之外,让表自动设置ID的最简单方法是什么。有没有简单的方法来保持MySQL行id不增长?
我有一张桌子,可以在很长一段时间内积累数千行。其中一些行将在稍后被删除。我如何获得新的行以获得最低的可用ID,而无需手动完成。
我可以在每次有人添加一行时重置AUTO_INCREMENT吗?
我想知道除了AUTO_INCREMENT之外,让表自动设置ID的最简单方法是什么。有没有简单的方法来保持MySQL行id不增长?
我有一张桌子,可以在很长一段时间内积累数千行。其中一些行将在稍后被删除。我如何获得新的行以获得最低的可用ID,而无需手动完成。
我可以在每次有人添加一行时重置AUTO_INCREMENT吗?
它可以自动递增重置为下一个可能的ID:
ALTER TABLE table_name AUTO_INCREMENT = 1
您甚至不必将它设置为下一个可用的关键。 MySQL将在下一次更新时自动采用下一个密钥。所以即使每次设置为“1”都是安全的。
但是,如果你不关心ID为什么你甚至使用ID?甚至大量的ID也不是问题。我得到了一张拥有超过2000万条目的表格,并且从来没有遇到问题。
坦率地说,这是不值得的麻烦。我相信它是可能的,但它只是一天结束时的唯一标识符 - 无论它是1还是1000都无关紧要。
如果是出于其他目的,请考虑使用其他字段。
国际海事组织你不应该混淆索引。
不可能的,一个ID都是唯一的,使用一次..
仅当您清空表。
这是错误的。它只能同时使用一次,但如果您删除了一个条目,它可能会再次使用。 – 2ndkauboy 2010-09-10 12:11:29
right @ Kau-Boy :) – 2010-09-10 12:16:05
@Kau不,你错了。如果一个人的孩子会死,而他们又生了另一个孩子,那么即使以第一个名字命名,它仍然是另一个孩子。你误解了独特的识别概念。 – 2010-09-10 12:24:15
谁在乎?一个integer可以有数十亿的唯一值,它们都花费相同数量的内存(每个4字节)。用主键赌博就像俄罗斯轮盘赌到你的数据库:最后你的数据库会死(它被损坏)。
我想你可以使用触发器,但这可能会在一段时间后变成一个巨大的混乱。不明白你为什么不想使用auto_increment,你有什么特别的原因吗?
@Jordy:你这话并不尽然,是只有一个行可以有,在任何给定的点值,但是如果你删除行仍可以重用针对另一行删除值。您也可以将计数器重置为任意值,包括增量而不删除表格。
你为什么要这样做?它可能很好地解决了以前对旧的,现在删除的数据的查询。 – BoltClock 2010-09-10 09:59:50
我很好奇 - 为什么你需要连续的ID没有差距? – 2010-09-10 10:00:16
你不应该那样做。这些问题应该在一些常见问题条件下被关闭。关于这样一个基本概念误解太多的讨论 – 2010-09-10 12:27:30