2012-07-16 25 views
6

Czy to wyrażenie "porównaj i zamień" zawsze atomowe, niezależnie od silnika (np. InnoDB lub MyISAM)? :MySQL Atomic UPDATE w InnoDB vs MyISAM

UPDATE tbl_name SET locked=1 WHERE id=ID AND locked <> 1; 

Pytam o to, ponieważ mam zamiar używać tego komunikatu zrobić pseudo blokowanie na poziomie wiersza, który jest kompatybilny z obu transakcyjnych i nietransakcyjnych tabel bazy danych.

To jest metoda, która jest recommended for MyISAM, ale nie jestem pewien, czy to działa dla InnoDB, ponieważ dokumentacja sugeruje zamiast tego korzystanie z transakcji.

+0

Link jest uszkodzony. W związku z tym użycie tego odosobnionego oświadczenia jest niejasne. –

Odpowiedz

4

Tak. W InnoDB, wiersz zostanie zablokowany (sprawi, że masz unikalny indeks na id, aktualizacja zablokuje wszystkie wiersze, które ma przeskanować), zaktualizowany i zwolniona blokada. Jeśli nie jesteś w jawnej transakcji/automatycznym zatwierdzaniu, każda instrukcja jest uruchamiana w osobnej transakcji, ale nadal jest transakcją i wykonywane są blokady