0

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

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

4

5 回答 5

2

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

于 2012-07-22T15:55:26.127 回答
1

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

伪代码:

$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');
于 2012-07-22T15:56:12.660 回答
0

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

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

于 2012-07-22T15:52:11.937 回答
0

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

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

于 2012-07-22T15:53:59.317 回答
0

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

SELECT id FROM table ORDER BY id DESC LIMIT 1
于 2012-07-22T15:56:23.260 回答