【问题标题】:Find next value of AUTO_INCREMENT column in MySQL [duplicate]在 MySQL 中查找 AUTO_INCREMENT 列的下一个值
【发布时间】:2013-08-13 16:13:12
【问题描述】:

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

【问题讨论】:

  • 两者都不是。我想收到一个值。但是这些答案打印了描述。不是可检索的值
  • 使用此代码:SELECT (IFNULL(max(id),0) + 1 ) as id from table。如果表中没有记录,IFNULL 会很有帮助

标签: mysql auto-increment next


【解决方案1】:

查询表状态如下:

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

【讨论】:

  • 是的,它正在输出。如何从显示的状态中检索该值? select auto_increment from(SHOW TABLE STATUS WHERE Name = 'table_name') 不起作用
  • 但是用什么语言?
  • java 使用 JDBC。我只想在 ResultSet 中接收值作为结果。
  • 按照上面的编辑使用它。
  • 我收到一条错误消息,java.sql.SQLException: Column 'Auto_increment' not found.
【解决方案2】:

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

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

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

【讨论】:

  • 我想对另一个表执行插入查询,检查它是否有效,然后才插入到这个表中。
  • 最好的方法是交易。如果您使用的是 MyISAM,我能想到的最好方法是插入行,获取自动增量值,,如果失败则删除该行。
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-22
    • 2014-08-05
    • 2021-10-01
    • 2014-12-10
    • 2018-08-04
    • 1970-01-01
    • 2010-12-04
    • 2010-11-27
    相关资源
    最近更新 更多