2011-04-11 81 views
0

是否有可能在MySQL中排队客户端访问数据库的请求。我正在尝试为并发管理执行此操作。可以使用MySQL锁,但不知何故,我无法获得理想的结果。排队SQL请求PHP

有效什么,我试图做的是:

  • INSERT的东西在新行
  • 从该行选择一列
  • 存储在一个变量

值当两个不同的客户端同时进行INSERT时,问题就会出现,因此两个客户端的变量都会存储最后一个INSERT的值。

我工作的以下替代,但它在几个测试运行失败,错误是相当明显的:

  • INSERT
  • 锁表
  • 选择
  • 商店
  • UNLOCK

谢谢!

+2

阅读关于MySQL中的事务,这就是你需要照顾你的问题。请注意,如果INSERT由于某种原因失败,您还没有想到会发生什么情况。 – 2011-04-11 14:15:59

+0

让我们假设事情按预期工作。当然,你的观点是有效的,但是一旦完成,我想解决这个问题。 – check123 2011-04-11 14:51:13

+1

我真的没有理由不使用这里的交易,你需​​要的一切都符合交易的目的。您发出的查询要么必须成功(全部),要么发生任何事情(您违反数据完整性)。 MySQL提供的所有功能都可以在事务处理期间使用(比如前面建议的last_insert_id())。在将这个想法抛弃之前考虑它,从长远来看,证明您的数据安全而不是妥协是明智的。 – 2011-04-11 15:00:09

回答

2

我最好的猜测是你有一个自动增量列,并希望在插入一行后得到它的值。一种选择是使用LAST_INSERT_ID()(详情herehere)。

如果这不适用,请发布一些更多的细节。你究竟在做什么以及哪些查询被解雇?

+0

主键确实是AUTO_INCREMENT,但我提取的是TIMESTAMP。因此可以说2个客户端同时连接到服务器,第一个客户端在YYYY-MM-DD HH:MM:SS,第二个客户端在YYYY-MM-DD HH:MM:SS + 1,导致会话变量存储YYYY-MM -DD HH:MM:SS + 1。这是不对的。 – check123 2011-04-11 14:54:44

+0

交易将如针对您的问题的评论中所建议的那样工作。或者,你可以得到'LAST_INSERT_ID()'来实现更高的并发后做了'SELECT'。 – nikhil500 2011-04-11 16:52:40