PHP中的MySql表锁


MySql table lock in PHP

我在PHP中做了一个webservice,它根据表的选择进行一系列计算,然后用新的结果更新表。

然而,我想防止另一个人在另一个人的会话仍在进行更新时调用同一个web服务的情况。

在这里锁定整个表然后再次解锁是正确的吗?如果是这样,我如何锁定和解锁mysql表使用PHP pdo?

像MySQL这样的数据库管理系统足够聪明,可以防止这样的并发性违规。

查找数据库隔离级别(读未提交、读已提交、可重复读、可序列化)和可能的问题(脏读、不可重复读…)-> Wikipedia。

就我个人而言,我不建议在您的情况下使用表锁。您最好将您的计算和数据库操作包装在事务中,并依靠DBMS来管理您的东西。

我发了一条评论:

这不是一个直接的回答,但我认为这没有任何问题。的计算和从数据库中获取数据在几分钟内完成毫秒。两个人同时互动的机会它太小了,大多数人都懒得做这样的锁。

但是如果这些计算是至关重要的,你可以通过添加一个新的字段,简单地称之为occupied, busy或类似的东西来防止这个问题。

当您运行脚本时,检查该字段是否设置为例如1,如果是,则使脚本休眠1-2-3秒,然后重试。如果该字段设置为0,则将其更新为1,进行计算并再次将其设置为0。

这将防止两个人同时访问相同的值