5

我在 PHP 中创建一个 web 服务,它基于从表中选择的内容进行一系列计算,然后使用新结果更新表。

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

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

4

2 回答 2

3

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

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

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

于 2012-12-29T14:26:26.727 回答
0

我发表了一条评论:

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

但是,如果这些计算很关键,您可以通过添加一个新字段并简单地调用它来防止这个问题occupiedbusy或者类似的东西。

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

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

于 2012-12-29T14:25:11.173 回答