我正在使用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列无论如何都要。
答案 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)
无法保证在插入行之前您将获得什么值。这主要是因为您必须锁定整个表以确保没有其他线程会使用“您的”下一个值进行插入。
您可以通过启动事务,插入行,获取值然后执行回滚来保留值。然后你可以安全地使用该值。
插入行会简单得多,所以也许我不理解你正在做的目的。