我有一个带有 AUTO_INCREMENT 主键的表。如果表中的最后一行被删除,下一个插入的行将采用相同的 ID。
有没有办法让 MySQL 的行为像 t-SQL,而不是重用 ID?然后,如果已删除的行被数据库外部的某些内容错误地引用,则不会返回任何行,并突出显示错误。
最佳答案
在这种情况下,您可能不应该在可公开访问的地方使用 AUTO_INCREMENT 索引。
要么从其他数据派生关键字段,要么使用不同的机制来创建您的 ID。尽管您需要了解(可能很严重的)性能影响,但我以前使用过的一种方法是使用“键”表来跟踪上次使用的键并递增它。
这样,您可以使用任何类型的 key ,甚至是非数字 key ,并使用您自己的算法递增它们。
我过去使用过 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
关于sql - 停止 MySQL 重复使用 AUTO_INCREMENT ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3718229/