8

我正在使用 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 列无论如何都会采用。

4

3 回答 3

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

于 2013-08-12T11:18:10.160 回答
1

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

SELECT TABLE_ROWS+1
FROM information_schema.tables 
WHERE table_name='tableName'
AND table_schema = DATABASE();
于 2013-08-12T12:05:32.517 回答
0

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

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

只插入行会简单得多,所以也许我不明白你在做什么的目的。

于 2013-08-12T11:25:08.497 回答