【问题标题】:Fetch the auto increment id from mysql database从 mysql 数据库中获取自动增量 id
【发布时间】:2012-07-22 15:43:34
【问题描述】:

我有一个带有自动增量字段的数据库。每当我在数据库中插入记录时,我都想检索自动增量列的值。我使用 mysql 作为我的数据库,使用 PHP 作为我的编程语言。我尝试使用 mysql_insert_id() 函数,但是当在同一时间点发生大量插入时,它不适合。

我想检索 AI 列的值,因为我正在为相应的记录存储一个文件,并且由于我将文件存储在单个目录中,因此我需要文件名是唯一的。还有其他方法可以做同样的事情吗?

【问题讨论】:

    标签: php mysql auto-increment file-storage


    【解决方案1】:

    使用 mysql_insert_id() 应该是安全的,因为它将返回 当前 连接的最后插入的 AI 值(请参阅php.net)。因此,只要您在脚本中的 INSERT 查询之后立即调用该方法,就不会出现任何竞争条件,即使您的脚本同时运行了多次。

    【讨论】:

    • 这正是我想要的。谢谢你的帮助。 :)
    【解决方案2】:

    对于单个插入,您可以在单个语句中执行此操作,以确保获得正确的值

    伪代码:

    $query = "INSERT INTO TABLE1 VALUES(null, 'test')";
    $id = mysql_execute("$query; SELECT LAST_INSERT_ID();"
    

    另一种方法是手动设置 ID。

    假设您要添加 1000 行

    1. query current ai value and store value
    
    2. alter table set ai value = current + 1000;
    
    3. make your inserts with setting ai value manually
    
       INSERT INTO TABLE1 VALUES ($id, 'test$id');
    

    【讨论】:

      【解决方案3】:

      使用 uniqid() 作为文件名。 "获取基于当前时间(以微秒为单位)的前缀唯一标识符。"

      看看这里php.net/manual/en/function.uniqid.php

      【讨论】:

        【解决方案4】:

        您还可以使用 uniqid() 生成唯一编号,将其插入表中并使用相同的文件名。

        http://php.net/manual/en/function.uniqid.php

        【讨论】:

          【解决方案5】:

          另一种使用 SQL 检索最后插入的 ID 的方法:

          SELECT id FROM table ORDER BY id DESC LIMIT 1
          

          【讨论】:

          • SELECT MAX(id) FROM table; 更短且没有排序。
          • 这个方法在并发连接插入自己的行时是不安全的。
          • 但是这是一条额外的sql语句,他已经说过他关心性能。
          • 您的所有积分都是有效的,我同意这不是获得价值的首选方式。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-03-10
          • 2014-11-18
          • 1970-01-01
          • 1970-01-01
          • 2020-06-17
          • 2011-10-09
          • 2012-12-19
          相关资源
          最近更新 更多