在MySQL中查找AUTO_INCREMENT列的下一个值

时间:2013-08-12 11:10:11

标签: mysql auto-increment next

我正在使用MySQL。 我想在不输入新记录的情况下检索AUTO_INCREMENT列将采用的下一个值。

create table ABC(id int(10) NOT NULL AUTO_INCREMENT,name char(10));

在oracle中我会使用sequencename.nextval();但是我在MySQL中使用了什么?

这就是为什么我使用

select max(id) from ABC;

假设我有一个id = 2的条目。现在列id将下一个值设为3。 在我创建id = 3的记录之前,如果我删除id = 2的记录。 我提到的查询的答案是2.但我想要实际值3,auto_increment列无论如何都要。

3 个答案:

答案 0 :(得分:9)

查询表状态如下:

SHOW TABLE STATUS WHERE `Name` = 'table_name'

现在,您将获得一个名为Auto_increment的列。这是你要求的价值。

在JAVA中:

conn = DriverManager.getConnection(connectionUrl, connectionUser, connectionPassword);
stmt = conn.createStatement();
rs = stmt.executeQuery("SHOW TABLE STATUS WHERE `Name` = 'table_name'");
rs.next();
String nextid = rs.getString("Auto_increment");

此处的完整示例:http://www.avajava.com/tutorials/lessons/how-do-i-use-jdbc-to-query-a-mysql-database.html

答案 1 :(得分:1)

如果我理解正确,您可以使用行数作为指标:

SELECT TABLE_ROWS+1
FROM information_schema.tables 
WHERE table_name='tableName'
AND table_schema = DATABASE();

答案 2 :(得分:0)

无法保证在插入行之前您将获得什么值。这主要是因为您必须锁定整个表以确保没有其他线程会使用“您的”下一个值进行插入。

您可以通过启动事务,插入行,获取值然后执行回滚来保留值。然后你可以安全地使用该值。

插入行会简单得多,所以也许我不理解你正在做的目的。