MySQL UPDATE语句未按预期锁定行

时间:2015-08-14 18:22:53

标签: php mysql locking

我有一个表,其中每一行代表一个可供消费者使用的资源。资源只能由一个消费者随时使用。消费者选择可用资源并随机选择一个。为了确保使用者可以使用它选择的资源,我有以下SQL语句:UPDATE resource SET is_in_use=1 WHERE is_in_use=0 AND id=?

如果受影响的行= 1,我认为这意味着消费者独占使用该资源。不是这样。我偶尔会遇到将多个消费者分配给单个资源的情况。

完整的PHP代码:

public function useResource() {
    $mysqli = secureMysqli();
    if ($stmt = $mysqli->prepare("UPDATE resource SET is_in_use=1 WHERE is_in_use=0 AND id=?")) {
        $stmt->bind_param('i', $this->id);
        if($stmt->execute())
        {
            if($mysqli->affected_rows == 1) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
   }
   return false;
}

0 个答案:

没有答案