在不添加新记录的情况下获取下一个主键是不可能的,不是吗? [复制]

Posted

技术标签:

【中文标题】在不添加新记录的情况下获取下一个主键是不可能的,不是吗? [复制]【英文标题】:Getting the next primary key without adding a new record is impossible, isn't it? [duplicate] 【发布时间】:2015-10-19 06:59:57 【问题描述】:

我考虑了谷歌排名靠前的结果,几乎所有的 mysql 功能等等......不幸的是,据我所知,不添加新行到数据库的表中,我们可以'不知道下一个主键。请说我错了。这个问题怎么可能没有解决方案?我很失望。

【问题讨论】:

你不能确定(如果你有多个并发用户,即使读取 MySQL 分配的下一个值也不能保证);但真正的问题是“你为什么需要这样做?” 因为在我的项目中,我是用AJAX上传图片的,旁边是提交了包含图片的文章。所以我需要为图片添加一个外键,以便它们可以与候选文章相关联。也就是说,我需要学习候选文章的主键,才能将这个值作为文章中图片的外键。 仍然不需要预测下一个将被分配的id 【参考方案1】:

用了大约 7 秒在 Google 上找到:https://www.bram.us/2008/07/30/mysql-get-next-auto_increment-value-fromfor-table/

SELECT AUTO_INCREMENT
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = "databaseName"
AND TABLE_NAME = "tableName"

【讨论】:

【参考方案2】:

存在于INFORMATION_SCHEMA.TABLES 中(参见here)。在合理的假设下,您可以获得那里的价值。

合理的假设:

影响自动增量的系统变量没有变化。 没有并发事务。 没有干预重置值。

【讨论】:

【参考方案3】:

通过此请求,您将获得表中的最后一个 id

从你的表中选择 MAX(id)

您可以在请求结果中添加 +1。

【讨论】:

以上是关于在不添加新记录的情况下获取下一个主键是不可能的,不是吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

mysql表设计的一些面试题

数据库的一些常用操作的总结

如何在不使用 datagridview 的情况下编辑绑定到组合框的数据表中的数据?

在不锁定集合的情况下从通用集合中获取 Count 值是不是安全?

如何在不丢失 SQL 中的任何行的情况下合并两个表?

SignInAsAuthenticationType 是不是允许我在不覆盖现有声明的情况下获取 OAuth 令牌?