Являются ли транзакции MySQL атомарными? - PullRequest
3 голосов
/ 31 июля 2011

Я прочитал, что транзакции являются атомарными в MySQL (InnoDB), но когда я тестирую следующий код в 5 потоках, они выбирают один и тот же идентификатор:

$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 Ответ

5 голосов
/ 31 июля 2011

В этом сценарии вы должны взглянуть на ключевое слово FOR UPDATE.

Простой выбор не заблокирует выбранные строки, поэтому то, что вы видите в своем примере, совершенно нормально.

...