Samo zapytanie SELECT wewnątrz transakcji nie jest odpowiednio chronione przed UPDATE i DELETE.
Czego potrzebujesz, aby użyć:
Jeśli wydasz Delete From orders Where id=1
, stanie się to, gdy wiersze w orders
tabeli zwolnią swoje blokady na końcu transakcji. Możesz eksperymentować (na serwerze deweloperskim / pomostowym) z wykorzystaniem READ UNCOMMITTED
poziomu izolacji transakcji, aby logicznie usunąć usuwanie, ale tylko po zatwierdzeniu stanie się widoczne i trwale zapisane.
W drugiej transakcji zasadniczo wszystkie zakłady są wyłączone. Jeśli uciekniesz
select * From orders Where id=1;
UPDATE orders SET username="John" Where id=1;
uruchomi Delete From orders Where id=1
się natychmiast. W zależności od kolejności, w jakiej MySQL wykonuje te instrukcje, zobaczysz (lub nie zobaczysz) usuwane wiersze.
CAVEAT
MySQL 5.6 ma teraz następujące funkcje :
START TRANSACTION READ WRITE;
START TRANSACTION READ ONLY;
Modyfikatory READ WRITE i READ TYLKO ustawiają tryb dostępu do transakcji. Pozwalają lub zabraniają wprowadzania zmian w tabelach używanych w transakcji. Ograniczenie TYLKO DO CZYTANIA zapobiega modyfikowaniu lub blokowaniu przez transakcję zarówno tabel transakcyjnych, jak i nietransakcyjnych, które są widoczne dla innych transakcji; transakcja może nadal modyfikować lub blokować tabele tymczasowe. Te modyfikatory są dostępne od MySQL 5.6.5.