Php - 插入自动增量值 - 对于父/子表 - 并发问题

发布于 2024-08-13 06:55:41 字数 279 浏览 6 评论 0原文

考虑一对多关系的简单模式。子表中引用父表的 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

不气馁 2024-08-20 06:55:41

当您调用 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.

淡笑忘祈一世凡恋 2024-08-20 06:55:41

正如 MySQL 文档中所述:

mysql_insert_id() 的值为
仅受发布的声明影响
在当前客户端连接内。
不受声明影响
由其他客户发出。

所以...没问题。不过,出于其他原因,我建议使用 ORM(例如 Doctrine)。

As in MySQL documentation:

The value of mysql_insert_id() is
affected only by statements issued
within the current client connection.
It is not affected by statements
issued by other clients.

So... no problem. Although, for other reasons, I recommend using ORM (like Doctrine).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文