我有一个带有自动增量字段的数据库。每当我在数据库中插入记录时,我都想检索自动增量列的值。我使用 mysql 作为我的数据库,使用 PHP 作为我的编程语言。我尝试使用 mysql_insert_id() 函数,但是当在同一时间点发生大量插入时,它不适合。
我想检索 AI 列的值,因为我正在为相应的记录存储一个文件,并且因为我将文件存储在单个目录中,所以我需要文件名是唯一的。还有其他方法可以做同样的事情吗?
我有一个带有自动增量字段的数据库。每当我在数据库中插入记录时,我都想检索自动增量列的值。我使用 mysql 作为我的数据库,使用 PHP 作为我的编程语言。我尝试使用 mysql_insert_id() 函数,但是当在同一时间点发生大量插入时,它不适合。
我想检索 AI 列的值,因为我正在为相应的记录存储一个文件,并且因为我将文件存储在单个目录中,所以我需要文件名是唯一的。还有其他方法可以做同样的事情吗?
使用 mysql_insert_id() 应该是安全的,因为它会返回当前连接的最后插入的 AI 值(参见php.net)。因此,只要您在脚本中的 INSERT 查询之后立即调用该方法,就不会出现任何竞争条件,即使您的脚本同时运行多次。
对于单个插入,您可以在单个语句中执行此操作以确保您获得正确的值
伪代码:
$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');
使用 uniqid() 作为文件名。“获取基于当前时间(以微秒为单位)的前缀唯一标识符。”
您还可以使用 uniqid() 生成唯一编号,将其插入表中并将其用作文件名。
另一种使用 SQL 检索最后插入的 ID 的方法:
SELECT id FROM table ORDER BY id DESC LIMIT 1