一尘不染

停止MySQL重用AUTO_INCREMENT ID

mysql

我有一个带有AUTO_INCREMENT主键的表。如果删除表中的最后一行,则下一个插入的行将具有相同的ID。

有没有办法让MySQL表现得像t-SQL,而不重用ID?然后,如果从数据库外部错误地引用了已删除的行,则不会返回任何行,突出显示错误。


阅读 253

收藏
2020-05-17

共1个答案

一尘不染

在这种情况下,您可能不应该在可公开访问的地方使用AUTO_INCREMENT索引。

可以从其他数据派生关键字段,或者使用其他机制来创建您的ID。尽管您需要了解(可能很严重的)性能影响,但我以前使用的一种方法是“键”表来跟踪最后使用的键并对其进行递增。

这样,您可以使用所需的任何类型的键,甚至可以是非数字键,也可以使用自己的算法递增它们。

我过去使用过6个字符的字母数字键:

CREATE TABLE `TableKeys` (
  `table_name` VARCHAR(8) NOT NULL,
  `last_key` VARCHAR(6) NOT NULL,
  PRIMARY KEY (`table_name`)
);

SELECT * FROM `TableKeys`;

table_name | last_key
-----------+---------
users      | U00003A2
articles   | A000166D
products   | P000009G
2020-05-17