如果你在mysql中有几个表,有外键和东西,还有一些带有一些间隙的自动增量计数器(条目的“中间”已经删除了条目),有没有简单的方法来“修复“柜台,以便没有任何差距?
所以从id = {1,10,11,40}转到id = {1,2,3,4}
THX。
答案 0 :(得分:3)
如果您只是更新密钥,则可能会破坏参照完整性。所以不,我会说,除了编写一个覆盖每个记录和更新ID的软件外,还要用指向每个记录的外键更新这些实体,这不是一个简单的“一个命令”任务。
还要考虑数据的外部消费者可能指向您的信息,因此您需要考虑只是随意更改密钥的影响。
最后,您希望获得连续,无间隙密钥分配的原因是什么?有间隙或“奇怪”的键值通常不是问题。只要每个记录的密钥确实是唯一的,那么无论它们的价值或顺序如何,最好不要让它们保持原样。
答案 1 :(得分:2)
如果这不是实时应用程序,并且您只希望行看起来漂亮,请删除该列并创建一个新列(当然,设置了AUTO INCREMENT)。
在实际操作中,您不应期望您的行ID是连续的。
答案 2 :(得分:1)
如果截断表格,则会重置计数器。但是,如果你已经有行,那么将它重置为0并不是一个好主意,因为你会有重复的id。
答案 3 :(得分:0)
您可以使用ALTER TABLE tblname AUTO_INCREMENT = 1重置ID,但这仅适用于空表。
您可以在没有ID的情况下转储表,删除所有条目并使用该命令,然后恢复数据。
请注意,这会破坏任何参照完整性。