Introduksjon til markører i SQL

Markører er midlertidige arbeidsområder som er opprettet i minnet for å behandle noen SQL-kommandoer på en haug med data. For komplisert definisjon? La oss forstå det. Tenk på markører som for hver sløyfe i SQL. Du vil utføre en oppgave på et sett med rader med data, du bruker markør. La oss si at du har en ansattstabell som har lønnen for hver ansatt i organisasjonen. Du ønsker å øke lønnen til hver ansatt med en viss prosentandel. Det er her du vil bruke en markør. 'Hvordan' er blitt illustrert senere i artikkelen.

Så, markører lager et midlertidig arbeidsområde med det valgte settet med rader og en peker som peker til gjeldende rad. Dette settet med rader, som markøren vil utføre ønsket operasjon, kalles et aktivt datasett. Pekeren henter radene fra resultatsettet en etter en. Du kan deretter utføre hvilken som helst SQL-operasjon én rad om gangen.

Implisitte markører

Implisitte markører blir, som navnet tilsier, generert av SQL-parseren for DML-spørsmål. DML-spørsmål er Data Manipulation Queries. Disse spørsmålene manipulerer eller endrer dataene. De forstyrrer ikke strukturen eller skjemaet til databasen. Spørsmål som SELECT, INSERT, UPDATE og DELETE genererer en implisitt markør. Implisitte markører er skjult for sluttbrukeren.

Eksplisitte markører

Eksplisitte markører er brukergenererte markører. Når en bruker instruerer SQL-parseren om å lage en markør for et aktivt sett, kalles markøren som er opprettet således en eksplisitt markør. Det aktive settet er definert gjennom en SELECT-spørring av brukeren. Vi vil dekke eksplisitte markører i detalj i denne artikkelen.

Markørhandlinger - Livsløpet til en markør

Livsløpet til en markør involverer vanligvis fem stadier:

1. Deklarere: Det første trinnet er å erklære en markør. Dette trinnet instruerer systemet til å generere en markør med det gitte datasettet. Datasettet er konstruert ved hjelp av en SQL-setning. På dette stadiet opprettes det aktive settet, men den midlertidige arbeidsområdet til markøren er ennå ikke åpnet i minnet.

2. Åpen: Deretter blir systemet bedt om å åpne markøren. På dette stadiet blir det midlertidige arbeidsområdet lastet inn i minnet med det aktive settet og det genereres en peker som peker til den første raden i det aktive settet.

3. Hent: Dette er det tilbakevendende trinnet i hele prosessen. Den gjeldende raden som pekes av pekeren, hentes og ønsket oppgave utføres på raddataene. Pekeren flytter til neste rad i markøren.

4. Lukk: Når datamanipuleringen er utført, må markøren lukkes.

5. Deallocate: Dette er det siste trinnet for å slette markøren og frigjøre minne, prosessor og andre systemressurser som er tilordnet markøren.

Eksplisitte markører - i aksjon!

OK, så nå har vi en grunnleggende forståelse av hva markører er og hvordan de fungerer. Det er på tide å få hendene skitne og lage en eksplisitt markør selv.

Terminologien til markører i SQL

La oss forstå terminologiene som brukes i denne syntaks.

Markøromfang

  • Markøromfang kan være enten GLOBAL eller LOKAL . En global markør er tilgjengelig gjennom hele tilkoblingen. En lokal markør er bare begrenset til de lagrede prosedyrene, funksjonene eller spørringen som inneholder markøren.
  • Dette er den MS SQL Server-spesifikke funksjonen. MySQL støtter bare lokale scoped-markører.

Markørbevegelse

  • MS SQL Server gir også muligheten til å stille markørbevegelsen. Det kan være enten den konvensjonelle Forward_Only-modus som flytter pekeren fra den første raden til den siste linjen for linje. Eller det kan rulles til første, siste, forrige eller neste rad.
  • Markører i MySQL er ikke-rullbare.

Markør Type

  • En markør kan være statisk, ettersom den kan cache det aktive settet til deallokalisering og kan sjonglere fremover og bakover gjennom dette hurtigbufrede aktive settet. En markør kan bare spole raskt fremover i statisk modus.
  • Det kan også være dynamisk å tillate tillegg eller sletting av rader i det aktive settet mens markøren er åpen. Disse endringene er ikke synlige for andre brukere av markøren i tastetastmodus. Markører i MySQL er bare hurtige fremover.

Markørlås

  • Markørlåser er nyttige i et miljø med flere brukere. De låser raden slik at ingen to brukere bruker samme data samtidig. Dette sikrer dataintegritet.
  • En skrivebeskyttet lås sier at raden ikke kan oppdateres.
  • Rullelåser låser raden når de blir hentet i markøren, slik at oppgaven lykkes og oppdaterte data er tilgjengelige utenfor markøren. Optimistiske forsøk på å oppdatere raden uten lås. Så hvis raden har blitt oppdatert utenfor markøren, vil ikke oppgaven lykkes.
  • MySQL støtter bare skrivebeskyttede låser. Dette betyr at MySQL ikke vil oppdatere den faktiske tabellen, men heller kopiere dataene for å utføre oppdateringskommandoer.

Dermed ser vi at disse alternativene bare er tilgjengelige i MS SQL Server. Dette gjør syntaks for MySQL-markører enda enklere.

Eksempel

La oss nå oppdatere lønnen til ansatte i medarbeiderne-tabellen.

Vi vil bruke dataene nedenfor i disse markørene i SQL-eksempel.

Markørkoden vår vil være som følger:

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

Og resultatet etter utførelse av markørkommandoen ovenfor ville være:

Konklusjon - Markører i SQL

Dermed har vi sett hva markører er, hvordan du bruker dem og hvor du kan unngå dem. Markører viser seg å være et nyttig verktøy for utviklere, men på bekostning av ytelsen. Så vær forsiktig når du velger markører.

Anbefalte artikler

Dette er en guide til markører i SQL. Her diskuterer vi typer, livssyklus og terminologi for markøren i SQL med eksempler. Du kan også gå gjennom andre foreslåtte artikler -

  1. Typer sammenføyninger i SQL
  2. SQL Alter Command
  3. SQL Views
  4. SQL Management Tools
  5. Typer markører i PL / SQL
  6. Topp 6 typer sammenføyninger i MySQL med eksempler