2015-02-24 60 views
0

我正在开发一个PHP和MySQL的Web应用程序,我有一种情况,我必须限制要插入表中的记录数。并发PHP和MySQL请求

... 
const MAX= 10 
if(/*record count query*/ < $this::MAX) { 
/*insert query*/ 
} 
... 

为了测试目的,我只是通过使用来自浏览器的GET请求来触发此代码。

当我连续点击F5键(刷新)约5秒时,计数超过最大值。

但是,当我一个一个地去计数是在极限。

这表明当我单击F5连续执行count queryinsert query正在同时执行。我不知道如何解决这个问题,一些指导会对我有帮助。

回答

1

您必须LOCK该表,所以当您尝试获取当前计数时,没有其他进程写入数据库。否则,你总是处于另一个进程当前插入数据的风险之下。

出于性能方面的原因,您可以将另一个表用作计数器,在这些操作过程中您将锁定该计数器。

+0

我收到错误号码:1100表'示例'未锁定为锁定表 – bkmagnetron 2015-02-24 09:18:32

+0

注意:查询将从一个表读取并插入到其他表中。所以,我使用了很多嵌套查询。 – bkmagnetron 2015-02-24 09:22:44

+0

好吧,它使用子查询表的别名后工作。 – bkmagnetron 2015-02-24 12:28:56