Php - 插入自动增量值 - 对于父/子表 - 并发问题
考虑一对多关系的简单模式。子表中引用父表的 ID。
在 php 中,我想使用语句 mysql_query($query)
在表中插入一行。然后我将使用 mysql_insert_id() 获取最后插入的行的 id。然后我将使用这个 id 将另一行插入到子表中。
我的问题是,由于 php 页面可能同时发生多个请求,如果上述两条语句不一个接一个地运行(即,例如,父级上发生两个插入,然后孩子身上的两个插入物)?可能存在并发问题。那么我们如何克服这个问题呢?
有什么想法吗?
Consider a simple schema of one to many relationship. Parent Table's Id is referenced in the Child table.
In php I want to insert a row into the table using the statement mysql_query($query)
. Then I will get the id of the last inserted row by using mysql_insert_id()
. Then i will use this id to insert the another row into the child's table.
My question is that the since there could be multiple requests happening on the same time for a php page, what if the above two statements do NOT run one after the other (ie, for example, there are two inserts happening on the parent and then the two inserts on the child)? There could be concurrency issues. So how do we overcome this?
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
当您调用
mysql_insert_id()
时,它会获取最后插入的 id连接,因此两个 PHP 脚本不会互相干扰。When you call
mysql_insert_id()
it gets the last inserted id for that connection, so two PHP scripts won't interfere with each other.正如 MySQL 文档中所述:
所以...没问题。不过,出于其他原因,我建议使用 ORM(例如 Doctrine)。
As in MySQL documentation:
So... no problem. Although, for other reasons, I recommend using ORM (like Doctrine).