我能找到下一个要使用的自增ID吗?

5

在不执行INSERT INTO查询的情况下,是否有可能找出我的主键的下一个自动递增将是什么?一些行被删除,这意味着仅仅在PK上执行SELECT MAX查询并不容易。非常感谢。


你为什么想知道那个? - Mchl
是的,参见https://dev59.com/VnNA5IYBdhLWcg3wgeId - Rich O'Kelly
谢谢。我只是好奇想知道我是否能找到这个值。 - user114671
4个回答

7
如果您真的想知道下一个自增值,请尝试 SHOW TABLE STATUS,返回下一个Auto_increment字段,例如:
SHOW TABLE STATUS WHERE name = your_table_name;

或者

SELECT Auto_increment
FROM information_schema.tables
WHERE table_schema = DATABASE() AND table_name = your_table_name

如果您使用 FROM 的第一个示例,则必须指定数据库名称,而不是表名称。您可以添加 WHERE name = your_table_name' 以仅获取该表,或者如果您已经使用了数据库,则删除 FROM database_name 并只使用 WHERE,就像下面的答案一样。 - aron.duby

2

执行以下代码可以获取该值:

SHOW TABLE STATUS WHERE Name = nameOfTableHere

然后从结果中检索'Auto_Increment'列


0
尝试以下内容:
SELECT Auto_increment 
  FROM information_schema.tables 
  WHERE table_name= 'tableName'
  AND table_schema = DATABASE();

0

这也是可能的:

(SELECT (SELECT your_primary_key FROM Your_Table ORDER BY your_primary_key DESC LIMIT 1)+1);

如果你要回答一个已经被接受答案的问题 - 在两年后回答 - 那么请给出正确的答案。这是不正确的,因为它没有考虑到行已经被删除的事实 - 所以你不能只是在SELECT MAX中加一 - 就像我在开头帖子中说的那样。 - user114671
抱歉 - 我有罪。我忘记了LIMIT。已更新为可工作的解决方案。在我的情况下,SELECT Auto_increment...无法工作。这就是为什么我添加了替代解决方案。 - Valter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接