Introduktion till markörer i SQL

Markörer är tillfälliga arbetsytor som skapas i minnet för att bearbeta vissa SQL-kommandon på en massa data. För komplicerad definition? Låt oss förstå det. Tänk på markörer som för varje slinga i SQL. Du vill utföra en uppgift på en uppsättning rader med data, du använder markören. Låt oss säga att du har en anställdstabell som har lönen för varje anställd i organisationen. Du vill öka lönen för varje anställd med en viss procentsats. Det är här du använder en markör. "Hur" har illustrerats senare i artikeln.

Så markörer skapar ett tillfälligt arbetsområde med den valda uppsättningen av rader och en pekare som pekar på den aktuella raden. Denna uppsättning rader, där markören utför den önskade åtgärden, kallas en aktiv datauppsättning. Pekaren hämtar raderna från resultatuppsättningen en efter en. Du kan sedan utföra alla SQL-operationer en rad i taget.

Implicita markörer

Implicita markörer, som namnet antyder, genereras av SQL-parser för DML-frågor. DML-frågor är Data Manipulation Queries. Dessa frågor manipulerar eller ändrar data. De stör inte strukturen eller schemat i databasen. Frågor som SELECT, INSERT, UPDATE och DELETE genererar en implicit markör. Implicita markörer är dolda för slutanvändaren.

Explicit markörer

Explicit markörer är användargenererade markörer. När en användare instruerar SQL-parsern att skapa en markör för en aktiv uppsättning kallas markören som sålunda skapas en uttrycklig markör. Den aktiva uppsättningen definieras genom en SELECT-fråga av användaren. Vi täcker explicita markörer i detalj i den här artikeln.

Marköråtgärder - en markörs livscykel

Markörens livscykel innefattar vanligtvis fem steg:

1. Förklara: Det första steget är att förklara en markör. Detta steg instruerar systemet att generera en markör med den givna datauppsättningen. Datauppsättningen är konstruerad med ett SQL-uttalande. I detta skede skapas den aktiva uppsättningen men markörens tillfälliga arbetsyta har ännu inte öppnats i minnet.

2. Öppna: Därefter instrueras systemet att öppna markören. I detta skede laddas det tillfälliga arbetsområdet i minnet med den aktiva uppsättningen och en pekare genereras som pekar på den första raden i den aktiva uppsättningen.

3. Hämta: Detta är det återkommande steget i hela processen. Den nuvarande raden som pekas av pekaren hämtas och önskad uppgift utförs på raddata. Pekaren går till nästa rad i markören.

4. Stäng: När datamanipuleringen är klar måste markören stängas.

5. Deallocate: Detta är det sista steget för att ta bort markören och släppa minnet, processorn och andra systemresurser som tilldelats markören.

Explicit markörer - i aktion!

Okej, så nu har vi en grundläggande förståelse för vad markörerna är och hur de fungerar. Det är dags att göra våra händer smutsiga och skapa en tydlig markör själva.

Terminologin för markörer i SQL

Låt oss förstå terminologierna som används i denna syntax.

Markörens omfattning

  • Markörens omfattning kan vara antingen GLOBAL eller LOKAL . En global markör är tillgänglig i hela anslutningen. En lokal markör är omfattningsbegränsad endast till lagrade procedurer, funktioner eller frågan som innehåller markören.
  • Detta är den MS SQL Server-specifika funktionen. MySQL stöder endast lokala scoped-markörer.

Markörrörelse

  • MS SQL Server ger också möjlighet att ställa in markörrörelsen. Det kan vara antingen det konventionella framåt-läget som flyttar pekaren från den första raden till den sista raden för rad. Eller så kan det rullas till första, sista, föregående eller nästa rad.
  • Markörer i MySQL är icke-rullbara.

Markörstyp

  • En markör kan vara statisk, eftersom den kan cache den aktiva uppsättningen till deallokalisering och kan jongla framåt och bakåt genom denna aktiva cache. En markör kan vara snabb_framåt endast i statisk läge.
  • Det kan också vara dynamiskt för att tillåta tillägg eller radering av rader i den aktiva uppsättningen medan markören är öppen. Dessa ändringar är inte synliga för andra användare av markören i tangentuppsättningsläge. Markörer i MySQL är bara snabb_framåt.

Markörlås

  • Markörlås är användbara i en miljö med flera användare. De låser raden så att inga två användare använder samma data samtidigt. Detta säkerställer dataintegritet.
  • Ett skrivskyddslås anger att raden inte kan uppdateras.
  • Rulllås låser raden när de hämtas i markören så att uppgiften lyckas och uppdaterad data finns utanför markören. Optimistiska försök att uppdatera raden utan lås. Således, om raden har uppdaterats utanför markören, lyckas inte uppgiften.
  • MySQL stöder endast skrivskyddslås. Detta innebär att MySQL inte kommer att uppdatera den faktiska tabellen utan snarare kopiera data för att utföra uppdateringskommandon.

Således ser vi att dessa alternativ endast är tillgängliga i MS SQL Server. Detta gör syntaxen för MySQL-markörer ännu enklare.

Exempel

Låt oss nu uppdatera de anställdas lön i vår anställdstabell.

Vi skulle använda nedanstående data i dessa markörer i SQL-exempel.

Vår markörkod skulle vara följande:

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

Och Output efter att ha utfört ovanstående markörkommando skulle vara:

Slutsats - Markörer i SQL

Således har vi sett vad markörer är, hur man använder dem och var man kan undvika dem. Markörer visar sig vara ett användbart verktyg för utvecklare men till kostnaden för prestanda. Så var försiktig när du väljer markörer.

Rekommenderade artiklar

Detta är en guide till markörer i SQL. Här diskuterar vi typer, livscykel och terminologi för markören i SQL med exempel. Du kan också gå igenom våra andra föreslagna artiklar -

  1. Typer av sammanfogningar i SQL
  2. SQL Alter Command
  3. SQL Views
  4. SQL-hanteringsverktyg
  5. Typer av markörer i PL / SQL
  6. Topp 6 typer av sammanfogningar i MySQL med exempel