我正在用PHP做一个new服务,它根据一个表中的select进行一系列计算,然后用新的结果更新表。
然而,我希望防止另一个人在另一个人的会话仍在进行更新时调用相同的where服务的情况。
锁定整个表,然后再解锁,这是正确的做法吗?如果是这样,我如何使用PHP pdo锁定和解锁mysql表?
发布于 2012-12-29 22:25:11
我发表了一条评论:
不是一个直接的答案,但我不认为这是任何问题。计算和从数据库获取数据在几毫秒内完成。两个人同时交互的机会是如此之小,以至于大多数人都不会费心制作这样的锁。
但是,如果这些计算很关键,您可以通过添加一个新字段并简单地将其命名为occupied、busy或类似的名称来防止此问题。
运行脚本时,检查此字段是否设置为示例1,如果是,请使脚本休眠1-2-3秒,然后重试。如果该字段设置为0,请将其更新为1,执行计算,然后再次将其设置回0。
这将防止两个人同时访问相同的值。
发布于 2012-12-29 22:26:27
像MySQL这样的数据库管理系统足够智能,可以防止像这样的并发冲突。
查看数据库隔离级别(读取未提交、已提交读取、可重复读取、可序列化)和-> Wikipedia可能存在的问题(脏读取、不可重复读取...)。
就我个人而言,我不建议在您的情况下使用表锁。您最好将计算和数据库操作包装在一个事务中,并依靠数据库管理系统来管理您的内容。
https://stackoverflow.com/questions/14082493
复制相似问题