【问题标题】:Inserting new values of a column in previously deleted row ID's place not after last inserted row ID在先前删除的行 ID 的位置插入列的新值,而不是在最后插入的行 ID 之后
【发布时间】:2018-02-03 04:45:38
【问题描述】:

我想给一列赋值 以这种方式

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

如果我为列插入值

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

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

【问题讨论】:

标签: php mysql


【解决方案1】:

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,...);

【讨论】:

  • @user2486 这通常被认为是一个非常糟糕的主意。很少需要做任何你认为你想做的事情......如果你要采用这种方法,它必须在一个事务中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-06
  • 2017-10-14
相关资源
最近更新 更多