我有一个带有AUTO_INCREMENT主键的表。如果删除表中的最后一行,则下一个插入的行将具有相同的ID。
有没有办法让MySQL表现得像t-SQL,而不重用ID?然后,如果从数据库外部错误地引用了已删除的行,则不会返回任何行,突出显示错误。
在这种情况下,您可能不应该在可公开访问的地方使用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