Introduktion til markører i SQL

Markører er midlertidige arbejdsområder oprettet i hukommelsen til at behandle nogle SQL-kommandoer på en masse data. For kompliceret definition? Lad os forstå det. Tænk på markører som for hver løkke i SQL. Du ønsker at udføre en opgave på et sæt rækker med data, du bruger markøren. Lad os sige, at du har en medarbejdertabel, der har lønnen for hver enkelt ansat i organisationen. Du vil øge hver medarbejders løn med en bestemt procentdel. Det er her du vil bruge en markør. 'The How' er illustreret senere i artiklen.

Så markører opretter et midlertidigt arbejdsområde med det valgte sæt rækker og en markør, der peger på den aktuelle række. Dette sæt rækker, som markøren udfører den ønskede handling, kaldes et aktivt datasæt. Markøren henter rækkerne fra resultatsættet en efter en. Du kan derefter udføre enhver SQL-handling en række ad gangen.

Implicitte markører

Implicitte markører genereres som SQL-parseren til DML-forespørgsler, som navnet antyder. DML-forespørgsler er Data Manipulation Queries. Disse forespørgsler manipulerer eller ændrer dataene. De forstyrrer ikke strukturen eller skemaet i databasen. Forespørgsler som SELECT, INSERT, UPDATE og DELETE genererer en implicit markør. Implicitte markører er skjult for slutbrugeren.

Eksplicitte markører

Eksplicitte markører er brugergenererede markører. Når en bruger instruerer SQL-parseren om at oprette en markør til et aktivt sæt, kaldes den således oprettede markør en eksplicit markør. Det aktive sæt defineres via en SELECT-forespørgsel af brugeren. Vi vil dække eksplicitte markører i detaljer i denne artikel.

Markørhandlinger - Markørens livscyklus

Markørens livscyklus involverer typisk fem trin:

1. Deklarere: Det første trin er at erklære en markør. Dette trin instruerer systemet til at generere en markør med det givne datasæt. Datasættet er konstrueret ved hjælp af en SQL-sætning. På dette trin oprettes det aktive sæt, men cursorens midlertidige arbejdsområde er endnu ikke åbnet i hukommelsen.

2. Åben: Derefter instrueres systemet til at åbne markøren. På dette trin indlæses det midlertidige arbejdsområde i hukommelsen med det aktive sæt, og der genereres en markør, der peger på den første række i det aktive sæt.

3. Hent: Dette er det tilbagevendende trin i hele processen. Den aktuelle række, der er peget på markøren, hentes, og den ønskede opgave udføres på rædedataene. Markøren flytter til næste række i markøren.

4. Luk: Når datamanipulationen er udført, skal markøren lukkes.

5. Deallocate: Dette er det sidste trin til at slette markøren og frigive hukommelsen, processoren og andre systemressourcer, der er tildelt markøren.

Eksplicitte markører - i aktion!

Okay, så nu har vi en grundlæggende forståelse af, hvad markører er, og hvordan de fungerer. Det er tid til at gøre vores hænder beskidt og selv skabe en eksplicit markør.

Terminologien for markører i SQL

Lad os forstå de terminologier, der bruges i denne syntaks.

Markøromfang

  • Markøromfang kan være enten GLOBAL eller LOKAL . En global markør er tilgængelig i hele forbindelsen. En lokal markør er kun begrænset til de lagrede procedurer, funktioner eller forespørgslen, der indeholder markøren.
  • Dette er den MS SQL Server-specifikke funktion. MySQL understøtter kun lokale scoped-markører.

Markørbevægelse

  • MS SQL Server giver også mulighed for at indstille markørbevægelsen. Det kan være enten den konventionelle fremad-bare tilstand, der flytter markøren fra den første række indtil den sidste linje for linje. Eller det kan rulles til den første, sidste, forrige eller næste række.
  • Markører i MySQL er ikke-rullbare.

Markør Type

  • En markør kan være statisk, da den kan cache det aktive sæt indtil deallokalisering og kan jonglere frem og tilbage gennem dette cache, der er aktivt. En markør kan kun være hurtig_forward i statisk tilstand.
  • Det kan også være dynamisk at tillade tilføjelse eller sletning af rækker i det aktive sæt, mens markøren er åben. Disse ændringer er ikke synlige for andre brugere af markøren i tastetasttilstand. Markører i MySQL er kun hurtige_forward.

Markørlås

  • Markørlåse er nyttige i et miljø med flere brugere. De låser rækken, så ingen to brugere bruger samme data samtidigt. Dette sikrer dataintegritet.
  • En skrivebeskyttet lås angiver, at rækken ikke kan opdateres.
  • Rullåse låser rækken, når de hentes i markøren, og sikrer, at opgaven lykkes, og at opdaterede data er tilgængelige uden for markøren. Optimistiske forsøg på at opdatere rækken uden nogen lås. Hvis rækken således er blevet opdateret uden for markøren, lykkes opgaven ikke.
  • MySQL understøtter kun skrivebeskyttede låse. Dette betyder, at MySQL ikke opdaterer den aktuelle tabel, men snarere kopierer dataene til at udføre opdateringskommandoer.

Vi ser således, at disse indstillinger kun er tilgængelige i MS SQL Server. Dette gør syntaks for MySQL-markører endnu mere enkle.

Eksempel

Lad os nu opdatere lønningen for medarbejderne i vores medarbejdertabel.

Vi ville bruge nedenstående data i disse markører i SQL-eksempel.

Vores cursorkode 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 output efter udførelse af ovenstående cursorkommando ville være:

Konklusion - Markører i SQL

Således har vi set, hvad markører er, hvordan man bruger dem, og hvor man kan undgå dem. Markører viser sig at være et nyttigt værktøj for udviklere, men på bekostning af ydelsen. Så vær forsigtig, når du vælger markører.

Anbefalede artikler

Dette er en guide til markører i SQL. Her diskuterer vi typer, livscyklus og terminologi for markøren i SQL med eksempler. Du kan også gennemgå vores andre foreslåede artikler -

  1. Typer af sammenføjninger i SQL
  2. SQL Alter Command
  3. SQL Views
  4. SQL-styringsværktøjer
  5. Typer af markører i PL / SQL
  6. Top 6 typer sammenføjninger i MySQL med eksempler