在先前删除的行ID中插入新值,而不是在最后插入的行ID之后

时间:2018-02-03 04:45:39

标签: php mysql

我想为列指定值 以这种方式

  

1,2,3,4,5,... 1000

如果我插入列

的值
  

1,2,3,4,5,6,7

使用自动增量 现在我要删除2,3 下一次插入应该是2,3,而不是8 2,3完成后,我的插入应以8 ...

开头

1 个答案:

答案 0 :(得分:2)

AUTO_INCREMENT表现得像这样;它不会填补已删除数据产生的空白,只是将新条目附加到"底部"当前的枚举。这是因为,在绝大多数情况下,重用唯一标识符是一种非常糟糕的做法。

除了更改表的设计以使标识符字段不具有AUTO_INCREMENT属性,然后实现自己的逻辑以外,您几乎无能为力。插入后填补空白。查找最小的未使用标识符并将其分配给即将进行的插入非常简单:

SET @GapId = (
    SELECT MIN(T1.ID + 1)
    FROM MyTable T1
    LEFT JOIN MyTable T2 ON T2.ID = T1.ID + 1
    WHERE T2.ID IS NULL
);

INSERT INTO MyTable(ID,...) VALUES (@GapId,...);