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