Odczyty widma w SQL

Słownik kwalifikacji INF.03 - Tworzenie i administrowanie stronami i aplikacjami internetowymi oraz bazami danych

Odczyt widmo to problem współbieżności transakcji, który występuje wtedy, gdy ta sama transakcja wykonuje dwa razy takie samo zapytanie, ale za drugim razem otrzymuje inną liczbę wierszy, ponieważ inna transakcja dodała lub usunęła rekordy spełniające warunek zapytania.

Nie chodzi tu o zmianę wartości w już odczytanym wierszu, lecz o pojawienie się albo zniknięcie całych rekordów.

Przykład

Transakcja T1 wykonuje zapytanie:

SELECT * FROM Pracownicy WHERE dzial = 'IT';

Otrzymuje 5 rekordów. W tym czasie transakcja T2 dodaje nowego pracownika do działu IT i zatwierdza zmianę:

INSERT INTO Pracownicy(imie, dzial) VALUES ('Anna', 'IT');
COMMIT;

Gdy T1 ponownie wykona to samo zapytanie, może otrzymać 6 rekordów. Ten dodatkowy rekord jest właśnie widmem.

Związek z poziomami izolacji

Odczyty widma mogą wystąpić między innymi przy poziomie izolacji Repeatable Read. Ten poziom zabezpiecza przed zmianą danych w już odczytanych wierszach, ale nie zawsze blokuje pojawianie się nowych wierszy spełniających warunek wyszukiwania.

Przed odczytami widm chroni poziom:

  • Serializable.

Różnica względem niepowtarzalnego odczytu

  • Niepowtarzalny odczyt: ten sam wiersz ma inną wartość przy ponownym odczycie.
  • Odczyt widmo: pojawia się lub znika cały wiersz spełniający warunek zapytania.

Na egzaminie należy kojarzyć: Repeatable Read → problem odczytów widm.