【发布时间】:2011-04-11 14:04:24
【问题描述】:
是否可以对访问 MySQL 中的数据库的客户端请求进行排队。我正在尝试这样做以进行并发管理。可以使用 MySQL 锁,但不知何故我无法获得预期的结果。
实际上我想要做的是:
- 在新行中插入一些内容
- 从该行中选择一列
- 将该值存储在变量中
当两个不同的客户端同时 INSERT 时会出现问题,因此两个客户端的变量都存储了最后一个 INSERT 的值。
我使用了以下替代方法,但在几次测试运行中失败了,而且错误非常明显:
- 插入
- 锁定表
- 选择
- 商店
- 解锁
谢谢!
【问题讨论】:
-
阅读 MySQL 中的事务,这就是您需要解决的问题。请注意,如果您的 INSERT 由于某种原因失败,您还没有想到会发生什么。
-
让我们假设事情按预期工作。当然,你的观点是正确的,但是一旦完成,我想解决这个问题。
-
我真的看不出为什么不使用这里的交易,你需要的一切都符合交易的目的。您发出的查询要么必须成功(全部),要么什么也没有发生(您将违反数据完整性)。 MySQL 提供的一切都在事务期间可用(如前面建议的 last_insert_id() )。在放弃这个想法之前考虑一下,从长远来看,确保数据安全而不是损害数据可能是明智之举。
-
哦!我正在处理 INSERT 失败。是的,正确地指出,事务是解决方案,我怎么会忘记!我可以将多个查询嵌套为事务。谢谢!
-
嗨!只需将您的回复作为答案发布,这样我就可以接受。另一方面,是否可以在 PHP 中对 SQL 访问进行排队?
标签: php mysql concurrency queue