MySQL事务是原子的吗?

时间:2011-07-31 14:57:01

标签: php mysql transactions innodb myisam

我已经读过MySQL(InnoDB)中的事务是原子的,但是当我在5个线程中测试下一个代码时,他们会选择相同的ID:

$db->beginTransaction();

$row = $db->fetchRow("SELECT * FROM atomic WHERE selected = 0 LIMIT 1");

sleep(5);

$db->update("atomic", array('selected' => 1), "id = " . $row['id']);

$db->commit();

echo "Selected row: " . $row['id'];

1 个答案:

答案 0 :(得分:5)

您应该查看此方案中的FOR UPDATE关键字。

简单的选择不会锁定选定的行,因此您在示例中看到的内容完全正常。