Inleiding tot cursors in SQL

Cursors zijn tijdelijke werkruimten die in het geheugen zijn gemaakt om enkele SQL-opdrachten op een aantal gegevens te verwerken. Te ingewikkelde definitie? Laten we het begrijpen. Denk aan Cursors als voor elke lus in SQL. U wilt een taak uitvoeren op een reeks gegevensrijen, u gebruikt de cursor. Stel dat u een personeelstabel hebt die het salaris voor elke werknemer van de organisatie bevat. U wilt het salaris van elke werknemer met een bepaald percentage verhogen. Hier zou u een cursor gebruiken. 'The How' is later in het artikel geïllustreerd.

Cursors maken dus een tijdelijke werkruimte met de geselecteerde set rijen en een aanwijzer die naar de huidige rij verwijst. Deze reeks rijen, waarop de cursor de gewenste bewerking uitvoert, wordt een actieve gegevensset genoemd. De aanwijzer haalt de rijen één voor één op uit de resultaatset. U kunt vervolgens elke SQL-bewerking rij voor rij uitvoeren.

Impliciete cursors

Impliciete cursors, zoals de naam al aangeeft, worden gegenereerd door de SQL-parser voor DML-query's. DML-zoekopdrachten zijn Gegevensmanipulatie-zoekopdrachten. Deze zoekopdrachten manipuleren of wijzigen de gegevens. Ze interfereren niet met de structuur of het schema van de database. Zoekopdrachten zoals SELECT, INSERT, UPDATE en DELETE genereren een impliciete cursor. Impliciete cursors zijn verborgen voor de eindgebruiker.

Expliciete cursors

Expliciete cursors zijn door de gebruiker gegenereerde cursors. Wanneer een gebruiker de SQL-parser opdraagt ​​een cursor voor een actieve set te maken, wordt de aldus gemaakte cursor een expliciete cursor genoemd. De actieve set wordt gedefinieerd door een SELECT-zoekopdracht door de gebruiker. We zouden expliciete cursors in detail in dit artikel behandelen.

Cursoracties - de levenscyclus van een cursor

De levenscyclus van een cursor bestaat meestal uit vijf fasen:

1. Verklaren: de eerste stap is het aangeven van een cursor. Deze stap instrueert het systeem om een ​​cursor te genereren met de gegeven gegevensset. De gegevensset is opgebouwd met behulp van een SQL-instructie. In dit stadium wordt de actieve set gemaakt, maar de tijdelijke werkruimte van de cursor is nog niet in het geheugen geopend.

2. Openen: vervolgens wordt het systeem geïnstrueerd om de cursor te openen. In dit stadium wordt de tijdelijke werkruimte in het geheugen geladen met de actieve set en wordt een aanwijzer gegenereerd die naar de eerste rij in de actieve set verwijst.

3. Ophalen: dit is de terugkerende stap in het hele proces. De huidige rij met de aanwijzer wordt opgehaald en de gewenste taak wordt uitgevoerd op de rijgegevens. De aanwijzer gaat naar de volgende rij in de cursor.

4. Sluiten: nadat de gegevensmanipulatie is voltooid, moet de cursor worden gesloten.

5. Deallocate: dit is de laatste stap om de cursor te verwijderen en het geheugen, de processor en andere systeembronnen vrij te geven die aan de cursor zijn toegewezen.

Expliciete cursors - in actie!

Oké, dus nu hebben we een basiskennis van wat cursors zijn en hoe ze werken. Het is tijd om onze handen vuil te maken en zelf een expliciete cursor te maken.

De terminologie van cursors in SQL

Laten we de terminologieën begrijpen die in deze syntaxis worden gebruikt.

Cursorbereik

  • Cursorbereik kan GLOBAL of LOCAL zijn . Een globale cursor is beschikbaar in de hele verbinding. Een lokale cursor heeft alleen bereikbeperking voor de opgeslagen procedures, functies of de query die de cursor bevat.
  • Dit is de MS SQL Server-specifieke functie. MySQL ondersteunt alleen lokale scoped-cursors.

Cursor beweging

  • MS SQL Server biedt ook de optie om de cursorbeweging in te stellen. Dit kan de conventionele Forward_Only-modus zijn die de aanwijzer van de eerste rij naar de laatste regel voor regel verplaatst. Of het kan naar de eerste, laatste, vorige of volgende rij worden gescrolld.
  • Cursors in MySQL zijn niet schuifbaar.

Type cursor

  • Een cursor kan statisch zijn, omdat deze de actieve set kan cachen tot de toewijzing en vooruit en achteruit kan jongleren door deze actieve cache. Een cursor kan alleen fast_forward zijn in de statische modus.
  • Het kan ook dynamisch zijn om het toevoegen of verwijderen van rijen in de actieve set toe te staan ​​terwijl de cursor open is. Deze wijzigingen zijn niet zichtbaar voor andere gebruikers van de cursor in de toetsensetmodus. Cursors in MySQL zijn alleen fast_forward.

Cursorslot

  • Cursorsloten zijn handig in een multi-user omgeving. Ze vergrendelen de rij zodat geen twee gebruikers tegelijkertijd op dezelfde gegevens werken. Dit zorgt voor gegevensintegriteit.
  • Een alleen-lezen vergrendeling geeft aan dat de rij niet kan worden bijgewerkt.
  • Scroll-locks vergrendelen de rij terwijl ze in de cursor worden opgehaald, zodat de taak slaagt en bijgewerkte gegevens buiten de cursor beschikbaar zijn. Optimistisch probeert de rij zonder slot bij te werken. Dus als de rij buiten de cursor is bijgewerkt, zal de taak niet slagen.
  • MySQL ondersteunt alleen alleen-lezen vergrendelingen. Dit betekent dat MySQL de werkelijke tabel niet bijwerkt, maar de gegevens kopieert om update-opdrachten uit te voeren.

We zien dus dat deze opties alleen beschikbaar zijn in MS SQL Server. Dit maakt de syntaxis voor MySQL-cursors nog eenvoudiger.

Voorbeeld

Laten we het salaris van werknemers nu bijwerken in onze tabel Werknemers.

We zouden de onderstaande gegevens in deze cursors in SQL-voorbeeld gebruiken.

Onze cursorcode zou als volgt zijn:

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

En de uitvoer na het uitvoeren van de bovenstaande cursoropdracht zou zijn:

Conclusie - Cursors in SQL

We hebben dus gezien wat cursors zijn, hoe ze te gebruiken en waar ze te vermijden. Cursors blijken een handig hulpmiddel voor ontwikkelaars, maar ten koste van de prestaties. Dus wees voorzichtig als je voor cursors kiest.

Aanbevolen artikelen

Dit is een handleiding voor cursors in SQL. Hier bespreken we de typen, levenscyclus en terminologie van de cursor in SQL met voorbeelden. U kunt ook onze andere voorgestelde artikelen doornemen -

  1. Typen joins in SQL
  2. SQL Alter Command
  3. SQL-weergaven
  4. SQL Management Tools
  5. Typen cursors in PL / SQL
  6. Top 6 soorten joins in MySQL met voorbeelden