MySQL - 插入前的id“预留”

时间:2011-04-22 20:49:21

标签: php mysql upload locking

我需要知道我将在插入数据库之前插入的记录的id(并保留它),因为我添加了产品并上传了该产品的图像,并且图像的位置与产品相关ID。

我可以找到随后的ID,但我还需要保持“锁定”状态,直到产品图片上传为止,以确保其他用户不会同时使用此ID。

4 个答案:

答案 0 :(得分:4)

您可以将其拆分为两个操作。

首先,您为产品创建所有内容并获取ID。在第二行中,您使用您上传的图片更新行,现在可以保存,因为您知道ID。

答案 1 :(得分:1)

您可以将其作为交易

我用谷歌搜索“php mysql transaction”,有很多教程如何做到这一点

http://www.linuxdig.com/news_page/1079394922.php

答案 2 :(得分:0)

只有拥有自己的自动增量实现,才能安全地完成id预约。即使在交易中运行,您也无法确定下一个ID是什么。你可以确定当你要求它时你有什么。

有些人使用mysql_insert_id来接收最后插入的ID。但我有一个问题,这个函数不是线程安全的,你可能会得到另一个刚刚插入的线程的id。

但是,在您的情况下,我只想到两个选项:

1)创建own sequence generator 2)插入您的数据行,使用where子句中的所有值再次选择它,并使用该ID。在事务中运行选项2(如上所述)

我会选择选项1.序列生成通常与所有其他数据库一起使用(据我所知,广泛使用的mysql仅支持自动增量)。因此序列是完全可以接受的。

干杯,基督徒

答案 3 :(得分:0)

我需要几乎相同的东西 - 除了目录依赖。

我正在考虑使用会话ID插入图像,然后在提交表单时,使用相同的会话ID更新图像,并向其添加父元素ID。