Wprowadzenie do kursorów w SQL

Kursory to tymczasowe obszary robocze utworzone w pamięci w celu przetworzenia niektórych poleceń SQL na zbiorze danych. Zbyt skomplikowana definicja? Zrozummy to. Pomyśl o kursorach jak o każdej pętli w SQL. Chcesz wykonać zadanie na zestawie wierszy danych, używasz kursora. Załóżmy, że masz tabelę pracowników, która zawiera wynagrodzenie dla każdego pracownika organizacji. Chcesz zwiększyć wynagrodzenie każdego pracownika o określony procent. Tutaj możesz użyć kursora. „Jak” zostało zilustrowane w dalszej części artykułu.

Tak więc kursory tworzą tymczasowy obszar roboczy z wybranym zestawem wierszy i wskaźnikiem wskazującym bieżący wiersz. Ten zestaw wierszy, na których kursor wykona żądaną operację, nazywa się Aktywnym zestawem danych. Wskaźnik pobiera wiersze z zestawu wyników jeden po drugim. Następnie możesz wykonać dowolną operację SQL po jednym wierszu na raz.

Domniemane kursory

Ukryte kursory, jak sama nazwa wskazuje, są generowane przez analizator SQL dla zapytań DML. Zapytania DML są zapytaniami do manipulacji danymi. Te zapytania manipulują lub zmieniają dane. Nie zakłócają struktury ani schematu bazy danych. Zapytania takie jak SELECT, INSERT, UPDATE i DELETE generują domyślny kursor. Niejawne kursory są ukryte dla użytkownika końcowego.

Jawne kursory

Jawne kursory to kursory generowane przez użytkowników. Gdy użytkownik instruuje analizator składni SQL, aby utworzył kursor dla aktywnego zestawu, tak utworzony kursor nazywa się kursorem jawnym. Aktywny zestaw jest definiowany przez użytkownika w zapytaniu SELECT. W tym artykule szczegółowo omówilibyśmy wyraźne kursory.

Działania kursora - cykl życia kursora

Cykl życia kursora zazwyczaj obejmuje pięć etapów:

1. Deklaracja: Pierwszym krokiem jest zadeklarowanie kursora. Ten krok instruuje system, aby wygenerował kursor z podanym zestawem danych. Zestaw danych jest konstruowany przy użyciu instrukcji SQL. Na tym etapie tworzony jest aktywny zestaw, ale tymczasowy obszar roboczy kursora nie jest jeszcze otwarty w pamięci.

2. Otwórz: Następnie system otrzymuje polecenie otwarcia kursora. Na tym etapie tymczasowy obszar roboczy jest ładowany do pamięci za pomocą aktywnego zestawu i generowany jest wskaźnik wskazujący pierwszy wiersz w aktywnym zestawie.

3. Pobierz: Jest to powtarzający się krok w całym procesie. Bieżący wiersz wskazywany przez wskaźnik jest pobierany, a żądane zadanie jest wykonywane na danych wiersza. Wskaźnik przesuwa się do następnego wiersza kursora.

4. Zamknij: po zakończeniu manipulacji danymi kursor musi zostać zamknięty.

5. Cofnij przydzielenie: jest to ostatni krok do usunięcia kursora i zwolnienia pamięci, procesora i innych zasobów systemowych przydzielonych kursorowi.

Jawne kursory - w akcji!

Okej, więc teraz rozumiemy, czym są kursory i jak działają. Czas ubrudzić sobie ręce i sami stworzyć wyraźny kursor.

Terminologia kursorów w SQL

Rozumiem terminologie stosowane w tej składni.

Zakres kursora

  • Zakres kursora może być GLOBALNY lub LOKALNY . Kursor globalny jest dostępny przez cały czas połączenia. Lokalny kursor jest ograniczony tylko do procedur przechowywanych, funkcji lub zapytania zawierającego kursor.
  • Jest to funkcja specyficzna dla MS SQL Server. MySQL obsługuje tylko lokalne kursory o zasięgu.

Ruch kursora

  • MS SQL Server daje również możliwość ustawienia ruchu kursora. Może to być albo konwencjonalny tryb Forward_Only, który przesuwa wskaźnik od pierwszego wiersza do ostatniej linii po linii. Lub można go przewinąć do pierwszego, ostatniego, poprzedniego lub następnego wiersza.
  • Kursorów w MySQL nie można przewijać.

Rodzaj kursora

  • Kursor może być statyczny, ponieważ może buforować aktywny zestaw aż do zwolnienia i może żonglować do przodu i do tyłu przez ten buforowany aktywny zestaw. Kursor może być przewijany do przodu tylko w trybie statycznym.
  • Może być również dynamiczny, aby umożliwić dodawanie lub usuwanie wierszy w aktywnym zestawie, gdy kursor jest otwarty. Zmiany te nie są widoczne dla innych użytkowników kursora w trybie zestawu kluczy. Kursory w MySQL są dostępne tylko w trybie fast_forward.

Blokada kursora

  • Blokady kursorów są przydatne w środowisku wielu użytkowników. Blokują wiersz, aby dwóch użytkowników nie korzystało jednocześnie z tych samych danych. Zapewnia to integralność danych.
  • Blokada tylko do odczytu stwierdza, że ​​wiersz nie może zostać zaktualizowany.
  • Blokady przewijania blokują wiersz, gdy są pobierane do kursora, zapewniając, że zadanie się powiedzie, a zaktualizowane dane będą dostępne poza kursorem. Optymistyczne próby aktualizacji wiersza bez blokady. Dlatego jeśli wiersz został zaktualizowany poza kursorem, zadanie się nie powiedzie.
  • MySQL obsługuje tylko blokady tylko do odczytu. Oznacza to, że MySQL nie zaktualizuje faktycznej tabeli, a raczej skopiuje dane w celu wykonania poleceń aktualizacji.

Widzimy zatem, że te opcje są dostępne tylko w MS SQL Server. To sprawia, że ​​składnia kursorów MySQL jest jeszcze prostsza.

Przykład

Zaktualizujmy teraz wynagrodzenie pracowników w naszej tabeli pracowników.

Wykorzystamy poniższe dane w tych kursorach w przykładzie SQL.

Nasz kod kursora wyglądałby następująco:

DECLARE @sal float
DECLARE @newsal float
DECLARE Emp_Cur CURSOR FOR SELECT Salary, Updated_Salary FROM Employees
OPEN Emp_Cur
FETCH NEXT FROM Emp_Cur INTO @sal, @newsal
WHILE @@FETCH_STATUS = 0
BEGIN
SET @newsal = @sal*1.25
UPDATE Employees SET Updated_Salary = @newsal WHERE CURRENT OF Emp_Cur
FETCH NEXT FROM Emp_Cur INTO @sal, @newsal
END
CLOSE Emp_Cur
DEALLOCATE Emp_Cur

Wyjście po wykonaniu powyższego polecenia kursora to:

Wniosek - kursory w SQL

W ten sposób widzieliśmy, czym są kursory, jak ich używać i gdzie ich unikać. Kursory okazują się być użytecznym narzędziem dla programistów, ale kosztem wydajności. Więc bądź ostrożny, kiedy wybierasz kursory.

Polecane artykuły

Jest to przewodnik po kursorach w języku SQL. Tutaj omawiamy typy, cykl życia i terminologię kursora w SQL z przykładami. Możesz także przejrzeć nasze inne sugerowane artykuły -

  1. Rodzaje złączeń w SQL
  2. Polecenie zmiany SQL
  3. Widoki SQL
  4. Narzędzia zarządzania SQL
  5. Rodzaje kursorów w PL / SQL
  6. Top 6 rodzajów połączeń w MySQL z przykładami