【问题标题】:Get next auto increment获取下一个自动增量
【发布时间】:2010-11-25 05:13:21
【问题描述】:

我知道这并不复杂,但我不记得该怎么做了。

我只需要知道下一个自动增量。

$result = mysql_query("
    SHOW TABLE STATUS LIKE Media
");
$data = mysql_fetch_assoc($result);
$next_increment = $data['Auto_increment'];

...但我不会为我工作,我做错了什么?

【问题讨论】:

    标签: php mysql auto-increment


    【解决方案1】:

    你也可以使用这个功能

    function getNextValue(){
    $query = "SHOW TABLE STATUS LIKE 'vendors'";
    dbconnect();
    $results=mysql_query($query);
    if(mysql_errno() != 0) {
        $result['count'] = -1;
        $result['error'] = "Error: ".mysql_error();
    } else {
        $result['count'] = mysql_num_rows($results);
        for($counter=0;$counter<$result['count'];$counter++) {
            $result[$counter] = mysql_fetch_assoc($results);
        }
    }
    return $result[0]['Auto_increment'];
    mysql_close();
    }
    

    【讨论】:

      【解决方案2】:

      如果您需要知道 下一个 auto_increment,那么 99% 的可能性是您做错了。而不是获取下一个 auto_increment,您应该只执行您即将执行的插入操作,然后使用 SELECT LAST_INSERT_ID() 从该插入获取 auto_increment 值。

      如果您尝试猜测下一个 auto_increment 值并且有多个用户同时进行猜测,那么您经常会得到错误的值。

      【讨论】:

      • -1 因为如果表没有任何条目,但有自动增量怎么办?
      • 那你还是做错了。在什么可能的情况下你想这样做? OP 希望获得下一个值,以便他们可以在另一个表中设置外键。这是一个坏主意。记录应该首先插入到这个表中,然后获取创建的自动增量值,然后插入外键。反过来,就像在将钥匙插入点火开关之前询问如何将汽车从车库中倒出。
      • 不是重点。关键是,问题是“如何获得下一个自动增量”而不是“如何获得最后插入的 id”。所以基本上,如果表是空的,并且您想知道下一个自动增量来创建戳记标题(例如:“Stamptitle-22”)。然后最后插入的 id 将不起作用。
      • 这仍然是错误的方法。插入以获取分配的 ID,然后根据需要进行更新。但同样,试图猜测下一个 auto_increment 值通常是个坏主意。
      【解决方案3】:

      另一种方法,但很慢,是:

      SELECT AUTO_INCREMENT FROM information_schema.`TABLES` T where TABLE_SCHEMA = 'myScheme' and TABLE_NAME = 'Media';
      

      information_schema 对于从许多方案中获取数据非常有用。

      【讨论】:

      • 速度慢的原因有哪些?
      • 这很慢,因为对于包含数千(或数百万)表或表的数据库,information_schema db 变得非常大。最好使用SHOW TABLE STATUS LIKE 'tableName' 查询。
      【解决方案4】:
      $result = mysql_query("
          SHOW TABLE STATUS LIKE 'Media'
      ");
      $data = mysql_fetch_assoc($result);
      $next_increment = $data['Auto_increment'];
      

      表的名称需要用单引号括起来,如下所示:'table_name'

      所以它现在工作得很好。

      :)

      【讨论】:

      • 效果很好!!使用 next_increment id 作为插入另一个表的外键是否足够可靠?
      • 来自下面的 longneck:“如果......您有多个用户同时 [使用该表],您将经常得到错误的值。”
      【解决方案5】:

      查询应如下所示:

      SHOW TABLE STATUS WHERE `Name` = 'Media';
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-09
        • 2012-07-13
        • 2020-01-29
        • 2013-06-29
        • 1970-01-01
        • 1970-01-01
        • 2016-01-08
        相关资源
        最近更新 更多