MySQL事务是原子的吗?

Wil*_*iam 3 php mysql myisam innodb transactions

我已经读过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'];
Run Code Online (Sandbox Code Playgroud)

Mat*_*Mat 5

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

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