sql - 停止 MySQL 重复使用 AUTO_INCREMENT ID

标签 sql mysql

我有一个带有 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/

相关文章:

sql - 如何在postgresql中插入循环

php - 如何使用php在数据库中插入动态添加的表单字段

MySQL 左外连接问题

PHP 和 MySQL : database not retriving data inside print

sql - 如何使用每个字段的最大时间戳交叉连接同一个表?

mysql - 计算不同的和重复的mysql

mysql - 如何从2个表中获取所有数据

mysql - 搜索比 '%something.%' 更快的查询

php - 使用嵌套for循环显示数据

浏览器中的 MySQL 代理 "Backends are down"