【问题标题】:Updating table based on selection, possibly using locking?根据选择更新表,可能使用锁定?
【发布时间】:2014-06-24 09:28:54
【问题描述】:

我正在使用 php 并尝试使用 mysql 选择以下内容:

$state_id = $sql->query('select state_id from table1 where id='.$sql->escape_string($_REQUEST['id']));

if ($state_id == $_REQUEST['state_id']) {
    $res = $sql->query('update table1 set state_id=state_id+1, state="'.$sql->escape_string($_REQUEST['state']).'" where id='.$sql->escape_string($_REQUEST['id']));
    echo 1; // Passes
} else {
    echo 0; // Fails
}

我希望仅当 state_id 等于 $_REQUEST['state_id'] 时才进行更新,但我还希望将此条件的结果返回给客户端,所有这些都在一个原子操作中完成。我的想法是也许我可以在回显 0 或 1 之前锁定 table1 表并解锁它。

有什么更好的方法来做到这一点?

【问题讨论】:

    标签: php mysql sql transactions locking


    【解决方案1】:

    我想你可能想要一个“SELECT .. FOR UPDATE”:

    如果您使用 InnoDB 表:

    http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html

    【讨论】:

      猜你喜欢
      • 2014-05-14
      • 2013-01-11
      • 2013-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-31
      • 1970-01-01
      相关资源
      最近更新 更多