当前位置: 首页 > 面试题库 >

停止MySQL重用AUTO_INCREMENT ID

黄朗
2023-03-14
问题内容

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


 类似资料:
  • 2019-07-03 13:27:50 0[注]InnoDB:128个回滚段中有128个处于活动状态。 2019-07-03 13:27:50 0“错误”INNODB:页面[页面ID:space=0,页面编号=305]日志序列号2834539在未来!当前系统日志序列号1604011。 2019-07-03 13:27:50 0[错误]InnoDB:您的数据库可能已损坏,或者您复制了InnoDB表空

  • 本文档叙述了在类Unix系统上如何停止和重启Apache 。 Windows NT/2000/XP/2003的用户请参见以服务方式运行Apache ,Windows 9x/ME用户则参见在控制台中运行Apache 。 简介 为了停止或者重新启动Apache ,你必须向正在运行的httpd进程发送信号。有两种发送信号的方法。第一种方法是直接使用UNIX的kill命令向运行中的进程发送信号。你也许你会

  • 问题内容: 我一直在开发使用WSGI部署在Apache服务器上的Django Web应用程序,并且一切进展顺利。今天,我对应用程序进行了一些较小的更改,以尝试自定义内置的Django Admin接口,并且最初出现了语法错误(括号未封闭)。这意味着当我触摸并加载代码时(我的虚拟主机上的WSGI以守护程序模式运行),我的网站被内部服务器错误替换,因为WSGI遇到语法错误时就停止了。 因此,我更正了语法

  • goodmornig,我对在Android Studio上创建数据库有一个问题。代码没有问题,但应用程序说“不幸停止”。我该如何解决这个问题呢? 还有另一个activity

  • 我试图在docker容器中调出我的MySql。但是,它在代码退出(1)的情况下停止了。下面是我的运行方式: 这是容器的日志 请帮帮我...

  • 问题内容: 我正在使用nodejs和mongoose —尝试在嵌套有递归函数和foreach的深层注释中找到特定的注释。有没有一种方法可以停止nodejs forEach?据我了解,每个forEach迭代都是一个函数,并且我不能只执行“ break”,而只能执行“ return”,但这不会停止foreach。 问题答案: 您无法打破。不过,我可以想到三种伪造方法。 1.The Ugly Way :