2012-06-08 8 views
5

Nie znalazłem jawnych poleceń blokowania sqlite przed wstawieniem lub zaktualizowaniem wierszy do tabeli. Czy sqlite obsługuje sam mechanizm blokujący? Moduł pagera opisany w http://sqlite.org/lockingv3.html obsługuje mechanizm blokujący. Ale nie jestem pewien, czy istnieją jakieś polecenia, które użytkownik może użyć do jawnego blokowania tabel. Proszę o poradę.Jawny mechanizm blokujący w SQLite

Dzięki

Odpowiedz

12

O ile wiem, nie istnieją komendy SQLite dedykowany do sterowania blokującego. Jednak można uzyskać sqlite, aby zablokować bazę danych za pomocą create transaction. Na przykład:

BEGIN IMMEDIATE TRANSACTION; 
... 
COMMIT TRANSACTION; 

BEGIN EXCLUSIVE TRANSACTION; 
... 
COMMIT TRANSACTION; 

Jeśli czytać dokumentację związaną I należy uzyskać lepsze wyobrażenie o różnicy między IMMEDIATE & EXCLUSIVE transakcji.

Warto zauważyć, że blokady w sqlite dotyczą całej bazy danych, a nie tylko pojedynczych tabel, w przeciwieństwie do instrukcji LOCK TABLE w innych bazach danych SQL.

8

SQLite wykonuje dowolne blokowanie w celu implementacji schematu transakcji opisanego w instrukcjach SQL. W szczególności, jeśli nie opisujesz żadnego, otrzymujesz automatyczne zatwierdzanie, z blokadą utrzymywaną przez czas trwania każdej instrukcji, a następnie upuszczoną po zakończeniu wyciągu. Jeśli potrzebujesz dłuższych transakcji (często prawdziwe!), Zapytaj o nie jednoznacznie za pomocą BEGIN TRANSACTION (często skróconej do BEGIN) i zakończ z COMMIT TRANSACTION (lub ROLLBACK TRANSACTION). Obsługa transakcji jest często pakowana za pomocą interfejsu językowego (ponieważ znacznie ułatwia to uzyskanie poprawności, łączenie czasu trwania transakcji z blokiem kodu lub wywołaniem metody), ale na poziomie podstawowym sprowadza się do BEGIN/COMMIT/ROLLBACK .

Krótko mówiąc, masz transakcje. Blokady są używane do transakcji implementacji. Nie masz surowych blokad (co jest dobre, są one raczej trudniejsze do uzyskania, niż mogłoby się wydawać na pierwszy rzut oka).