Mysql中的列id

时间:2011-11-30 12:19:41

标签: mysql

我有一个表格,其中第一列是自动增量ID定义,如INT UNSIGNED PRIMARY KEY AUTO_INCREMENT

现在我想删除一些包含NULL的行,之后,id不一致,有没有办法让它们自动调整?就像现在一样,我删除了第一行,所以id从我的表中的2开始,并且我在中间删除了一些行。

4 个答案:

答案 0 :(得分:12)

这是主键,它不应该遵循你认为它的逻辑。如果您有顺序值1,2,3,4,5,然后删除id = 3的值,则无法重复使用值3

含义很严重,只是不要试图强制MySQL重用已删除的值。

如果您需要某种排序以“美观”显示,请不要依赖id列的值。它是一个主键,它只存在于每一行都可以被唯一标识,从而使其实际价值在外部世界方面毫无意义。

我知道人们通常希望他们的数字是连续的,并且差距看起来很难看,但是如果你需要实现它,那么使用你手动更新的其他列来实现它。

请记住,永远不要自己触摸主键

答案 1 :(得分:1)

一般来说,如果你定义一个自动递增的主键,你可以这样做,通过确保唯一且常量的id(每个表)来保持数据的一致性,所以你想要做的就是违背这个(非常常见的)先决条件。这只是一种化妆品,或者为什么要这样做?

答案 2 :(得分:0)

您使用ID列的方式不应该按照您希望的方式执行。因为每次在表中插入新条目时它都应该增加,并且根据其工作情况,如果从中删除任何值,它不应该减少。

您正在使用它作为主键,它应该是唯一的整体,所以如果您尝试将其值更改为之前分配的某个值,那么这不是一个好主意。

假设您首先将ID分配给一个客户端,并在记录中的任何位置提及此ID,然后从数据库中删除该客户端,然后尝试将此ID重新分配给其他客户端。然后,您对两个客户的记录将是混合的。

休息取决于您正在使用的应用程序类型。

答案 3 :(得分:0)

只需添加到@ N.B。,如果您知道自己的需求并且知道ID已被删除(PRIMARY KEY有唯一的检查),您可以随时INSERT INTO ... set id=1, ...。 例如,如果您需要从备份中恢复已删除的行。