【问题标题】:Zend Framework lock row queryZend Framework 锁行查询
【发布时间】:2015-01-01 22:15:24
【问题描述】:

这是我的查询:

 try {
        $this->_db->beginTransaction();

        $this->_db->update($this->_name, $data, $where);

        $this->_db->commit();
    } catch (Exception $e) {
        $this->_db->rollback();

        throw $e;
    }

如果某些用户使用此查询,我想锁定表中的这一行,并在查询完成时解锁。但是,现在如果两个用户同时使用这个查询,他们可以更新这一行。我的表是 InnoDB。

经验。 如果某些用户使用此查询更新 id=10 的新闻,而此时其他用户使用此查询更新相同的新闻(id=10)。下次更新其中一个用户将无法看到新的新闻信息。

【问题讨论】:

  • 如果你的事务中只有一个更新命令,你不需要使用事务,因为它已经是原子的了

标签: php mysql zend-framework innodb


【解决方案1】:

InnoDB 表自动使用行级锁定。来自MySQL 5.6 Reference Manual: 8.10.1 Internal Locking Methods

MySQL 对 InnoDB 表使用行级锁定,以支持多个会话同时写入访问,使其适用于多用户、高并发和 OLTP 应用程序。

因此,不能同时写入两行。后续查询只是排队,直到它们准备好执行。 (MyISAM 和其他表类型也是如此,但它们使用表级锁定。)您不需要修改代码。

【讨论】:

  • 好的,但是有些用户使用这个查询来更新 id=10 的新闻,而此时其他用户使用这个查询来更新相同的新闻(id=10),但是其中一个用户不会能够看到新的新闻信息。
猜你喜欢
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
相关资源
最近更新 更多