这是我的疑问:
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)。更新其中一个用户将无法看到新的新闻信息。
答案 0 :(得分:0)
InnoDB表自动使用行级锁定。来自MySQL 5.6 Reference Manual: 8.10.1 Internal Locking Methods:
MySQL使用InnoDB表的行级锁定来支持多个会话的同时写访问,使其适用于多用户,高度并发和OLTP应用程序。
因此,不能同时写入两行。后续查询只是排队等待,直到它们准备好执行。 (MyISAM和其他表类型也是如此,但它们使用表级锁定。)您无需修改代码。