logo

SQL Server -tapahtuma

Tapahtuma SQL Serverissä on a peräkkäinen joukko lauseita tai kyselyjä suorittaa yksittäisiä tai useita tehtäviä tietokannassa. Jokaisella tapahtumalla voi olla yksi luku-, kirjoitus-, päivitys- tai poistotoiminto tai kaikkien näiden toimintojen yhdistelmä. Jokaisella tapahtumalla on tapahduttava kaksi asiaa SQL Serverissä:

  • Joko kaikki muutokset onnistuvat, kun tapahtuma on tehty.
  • Tai kaikki muutokset kumotaan, kun tapahtuma peruutetaan.

Tapahtuma ei voi onnistua ennen kuin kaikki joukon toiminnot on suoritettu. Se tarkoittaa, että jos jokin argumentti epäonnistuu, tapahtumatoiminto epäonnistuu. Jokainen tapahtuma alkaa ensimmäisellä suoritettavalla SQL-käskyllä ​​ja päättyy, kun se löytää vahvistuksen tai palautuksen, joko eksplisiittisesti tai implisiittisesti. Se käyttää TEHDÄ tai PALAUTUS lausunnot eksplisiittisesti sekä implisiittisesti, kun käytetään DDL-käskyä.

Alla oleva kuvaesitys selittää tapahtumaprosessin:

SQL Server -tapahtuma

Seuraava esimerkki selittää tapahtuman käsitteen:

Tässä esimerkissä käytetään pankkitietokantajärjestelmää tapahtuman käsitteen selittämiseen. Oletetaan, että pankkiasiakas haluaa nostaa rahaa tililtään pankkiautomaattitilassa. Pankkiautomaatti voi suorittaa tämän toiminnon kolmessa vaiheessa:

  1. The Ensimmäinen askel on tarkistaa pyydetyn summan saatavuus tilillä.
  2. The toinen vaihe vähentää summan tililtä, ​​jos summa on käytettävissä, ja päivittää sitten tilin saldon.
  3. The kolmas vaihe on kirjoittaa rahannostotoiminto lokitiedostoon. Tämä vaihe kirjoittaa tapahtuman onnistumisesta tai epäonnistumisesta. Jos onnistut, kirjoita tietojen muutos tietokantaan. Muussa tapauksessa tapahtuma palautetaan aiempaan tilaan.

Transaktioiden perusperiaate on, että jos jokin lauseista palauttaa virheen, koko muutossarja peruutetaan tietojen eheyden varmistamiseksi. Ja jos tapahtumat onnistuvat, kaikki muutokset pysyvät tietokannassa. Näin ollen, jos pankkiautomaatista nostettaessa tulee sähkökatko tai muita ongelmia, tapahtumat takaavat, että saldomme pysyy tasaisena. Tapahtumalausunto suorittaa nämä toiminnot parhaiten, koska tapahtuman neljä keskeistä ominaisuutta tekevät kaikista toiminnoista tarkempia ja johdonmukaisempia. Kaupan neljää omaisuutta kutsutaan nimellä ACID.

lajittelu Javassa arraylistissa

Tapahtuman ominaisuudet

Tapahtumaominaisuuksia kutsutaan ACID-ominaisuuksiksi (Atomicity, Consistency, Isolation, Durability), joita käsitellään yksityiskohtaisesti alla:

SQL Server -tapahtuma

Atomuus: Tämä ominaisuus varmistaa, että kaikki tapahtumaan sisältyvät lausekkeet tai toiminnot on suoritettava onnistuneesti. Muussa tapauksessa koko tapahtuma keskeytetään ja kaikki toiminnot palautetaan edelliseen tilaan, kun jokin toiminto epäonnistuu.

Johdonmukaisuus: Tämä ominaisuus varmistaa, että tietokanta muuttaa tilaa vain, kun tapahtuma toteutetaan onnistuneesti. Se on myös vastuussa tietojen suojaamisesta kaatumisilta.

Eristäytyminen: Tämä ominaisuus takaa, että kaikki tapahtumat on eristetty muista tapahtumista, mikä tarkoittaa, että tapahtuman jokainen toiminto suoritetaan itsenäisesti. Se myös varmistaa, että lausunnot ovat läpinäkyviä toisilleen.

Kestävyys: Tämä ominaisuus takaa, että sitoutuneiden tapahtumien tulos säilyy tietokannassa pysyvästi, vaikka järjestelmä kaatuu tai epäonnistuu.

Tapahtumatilat SQL Serverissä

SQL Server voi käyttää kolmea eri tapahtumatilaa:

Automaattinen maksutapahtumatila: Se on SQL Serverin oletustapahtumatila. Se arvioi jokaisen SQL-lauseen tapahtumana, ja tulokset sitovat tai peruutetaan vastaavasti. Siten onnistuneet lausunnot sitovat välittömästi, kun taas epäonnistuneet lausunnot peruutetaan välittömästi.

Implisiittinen tapahtumatila. Tämä tila sallii SQL Serverin aloittaa implisiittisen tapahtuman jokaiselle DML-käskylle, mutta se edellyttää nimenomaisesti commit- tai rollback-komentojen käyttöä lausekkeiden lopussa.

Eksplisiittinen tapahtumatila: Käyttäjä määrittää tämän tilan, jonka avulla voimme tunnistaa tapahtuman alkamis- ja lopetuspisteet tarkasti. Se keskeytyy automaattisesti vakavan virheen sattuessa.

Tapahtuman valvonta

Seuraavia komentoja käytetään tapahtumien ohjaamiseen:

    ALOITA TAPAHTUMA:Se on komento, joka osoittaa jokaisen tapahtuman alun.TEHDÄ:Se on komento, jolla muutokset tallennetaan pysyvästi tietokantaan.PALAUTUS:Se on komento, jota käytetään peruuttamaan kaikki muutokset ja siirtymään edelliseen tilaan.SÄÄSTÖPISTE:Tämä komento luo tapahtumaryhmiin pisteitä, joiden avulla voimme peruuttaa vain osan tapahtumasta koko tapahtuman sijaan.VAPAUTA SÄÄSTÖPISTE:Sitä käytetään poistamaan jo olemassa oleva SAVEPOINT.MÄÄRITÄ TAPAHTUMA:Tämä komento antaa tapahtumalle nimen, jonka avulla siitä voidaan tehdä vain luku tai luku/kirjoitus tai liittää se tiettyyn palautussegmenttiin.

HUOMAUTUS: Voimme käyttää vain DML-käskyjä (INSERT, UPDATE ja DELETE) Transaction Control Language -komennoille. Emme voi käyttää niitä luodessasi tai pudottaessamme taulukoita, koska nämä toiminnot sitoutuvat tietokantaan automaattisesti.

Tapahtuman tila

Se osoittaa, kuinka tapahtumat sujuvat niiden elinkaaren aikana. Se kuvaa tapahtuman tämänhetkistä tilaa sekä kuinka tapahtuma käsitellään tulevaisuudessa. Nämä tilat määrittävät säännöt, jotka määrittävät, sitoutuuko tapahtuma vai keskeytyykö se.

SQL Server -tapahtuma

Kuvataan jokainen tapahtumatila SQL Serverissä:

Aktiivinen tila: Tapahtuma on aktiivisessa tilassa, kun tapahtuman käskyjä suoritetaan. Se muuttuu muotoon 'osittain sitoutunut tila' jos kaikki luku- ja kirjoitustoiminnot suoritetaan ilman virheitä. Jos jokin ohje epäonnistuu, se muuttuu epäonnistuneeksi tilaan.

Osittain sitoutunut: Kun kaikki luku- ja kirjoitustoiminnot on suoritettu, muutos tehdään päämuistiin tai paikalliseen puskuriin. Valtio menisi 'sitoutunut tila' jos muutokset tehdään pysyvästi tietokantaan. Muussa tapauksessa se menee 'epäonnistunut tilaan'.

Epäonnistunut tila: Tapahtuma siirtyy epäonnistuneeseen tilaan, kun tapahtuman käsky epäonnistuu tai tietokannan pysyvä muutos epäonnistuu.

Keskeytetty osavaltio: Kauppa siirtyy a 'epäonnistunut tila' an 'keskeytetty tila' kun tapahtuu mikä tahansa vika. Muutokset poistetaan tai peruutetaan, koska nämä muutokset tehdään vain paikalliseen puskuriin tai päämuistiin aiemmissa tiloissa.

Sitoutunut tila: Tapahtuma on valmis ja siirtyy tähän tilaan, kun muutokset tehdään pysyviksi tietokannassa ja lopetetaan 'päätetty tila'.

Päätetty tila: Jos palautusta ei ole ja tapahtuma on 'sitoutunut tila' järjestelmä on johdonmukainen ja valmis uuteen tapahtumaan, kun vanha lopetetaan.

Transactionin käyttöönotto SQL Serverissä

Otetaan muutamia esimerkkejä ymmärtääksemme, kuinka voimme toteuttaa tapahtuman SQL Serverissä. Tässä käytämme 'Tuote' taulukko näyttääksesi kaikki tapahtumatilat.

Seuraavat SQL-skriptit luovat tuotetaulukon valittuun tietokantaan:

 CREATE TABLE Product ( Product_id INT PRIMARY KEY, Product_name VARCHAR(40), Price INT, Quantity INT ) 

Lisää tiedot tähän taulukkoon suorittamalla seuraavat komentosarjat:

 INSERT INTO Product VALUES(111, 'Mobile', 10000, 10), (112, 'Laptop', 20000, 15), (113, 'Mouse', 300, 20), (114, 'Hard Disk', 4000, 25), (115, 'Speaker', 3000, 20); 

Tarkista tiedot suorittamalla SELECT-käsky:

SQL Server -tapahtuma

Esimerkki COMMIT-tapahtumasta

Tapahtumassa käytetyt SQL-lauseet kannattaa jakaa useisiin loogisiin osiin. Ja sitten voimme päättää, sitoudummeko vai peruutammeko tiedot. Seuraavat vaiheet havainnollistavat tapahtuman luomista:

  • Aloita tapahtuma käyttämällä ALOITA TAPAHTUMA komento.
  • Kirjoita SQL-lauseet ja jaa ne tarpeidemme mukaan
  • Käytä TEHDÄ lauseke tapahtuman loppuunsaattamiseksi ja muutosten tallentamiseksi pysyvästi.

Alla on komennot, jotka selittävät COMMIT-toiminnot SQL Serverissä:

 -- Start a new transaction BEGIN TRANSACTION -- SQL Statements INSERT INTO Product VALUES(116, 'Headphone', 2000, 30) UPDATE Product SET Price = 450 WHERE Product_id = 113 -- Commit changes COMMIT TRANSACTION 

Jos virhettä ei löydy, näemme seuraavan tulosteen, jossa jokainen tapahtuman SQL-lause suoritetaan itsenäisesti:

SQL Server -tapahtuma

INSERT- ja UPDATE-käskyjä ei voi peruuttaa tapahtuman sitomisen jälkeen. Kun tarkistamme taulukon commit-toiminnon jälkeen, näemme seuraavat tiedot:

SQL Server -tapahtuma

Esimerkki ROLLBACK-tapahtumasta

Käytämme ROLLBACK-komentoa peruuttaaksemme tapahtumat, joita ei ole vielä tallennettu tietokantaan, ja palataksemme tapahtuman alkamispisteeseen. Seuraava esimerkki selittää ROLLBACK-toiminnon SQL Serverissä:

 -- Start a new transaction BEGIN TRANSACTION -- SQL Statements UPDATE Product SET Price = 5000 WHERE Product_id = 114 DELETE FROM Product WHERE Product_id = 116 

Kun olemme suorittaneet yllä olevan tapahtuman, voimme nähdä, että se suoritetaan onnistuneesti. Se ei kuitenkaan vaikuta tietokannan muutoksiin, koska muutoksista ei voi tulla pysyviä, ennen kuin emme suorita COMMIT- tai ROLLBACK-käskyä. Siksi meillä on mahdollisuus käyttää ROLLBACK-tapahtumakomentoa kaikkien tietokantatoimintojen peruuttamiseen. Tässä on koko kauppailmoitus:

 -- Start a new transaction BEGIN TRANSACTION -- SQL Statements UPDATE Product SET Price = 5000 WHERE Product_id = 114 DELETE FROM Product WHERE Product_id = 116 --Undo Changes ROLLBACK TRANSACTION 

@@Error Global -muuttujan käyttö tapahtumissa:

Tämä muuttuja on käytetään tarkistamaan, onko virhe vai ei. Alla oleva esimerkki selittää sen konseptin. Täällä aloitamme ensin tapahtuman BEGIN-komennolla ja kirjoitamme sitten kaksi insert-lausetta. Seuraavaksi käytämme globaalia järjestelmämuuttujaa @@VIRHE in IF-lause tarkistaaksesi virheen. Jos arvo on suurempi kuin 0, se tarkoittaa, että kyseessä on virhe. Nyt kauppa peruutetaan; muutoin kauppa on sitoutunut.

 BEGIN TRANSACTION INSERT INTO Product VALUES(115,'Speaker', 3000, 25) -- Check for error IF(@@ERROR > 0) BEGIN ROLLBACK TRANSACTION END ELSE BEGIN COMMIT TRANSACTION END 

Kun yllä oleva tapahtuma suoritetaan, huomaamme, että se on peruutettu. Se johtuu yrityksestämme lisätä kaksoisarvo Ensisijainen avain -sarakkeeseen.

mikä on jquery

Automaattinen palautustapahtuma

Suurin osa tapahtumista sisältää useamman kuin yhden kyselyn. Jos jokin SQL-lauseista tuottaa virheen tapahtumaa suoritettaessa, tietokannassa ei tapahdu muutoksia eikä muita käskyjä suoriteta. Tämä konsepti tunnetaan nimellä Auto Rollback Transaction SQL Serverissä. Käytämme yksinkertaista esimerkkiä tämän prosessin havainnollistamiseen.

 BEGIN TRANSACTION INSERT INTO Product VALUES(118, 'Desktop', 25000, 15) UPDATE Product SET Quantity = 'ten' WHERE Product_id = 113 SELECT * FROM Product COMMIT TRANSACTION 

Tämä tapahtuma tuottaa seuraavan tuloksen:

SQL Server -tapahtuma

Tässä tulosteessa voimme nähdä, että insert-käsky suoritettiin onnistuneesti. Päivityskäskyn suorittaminen löysi kuitenkin virheen, joka johtuu tietotyypin muunnosongelmasta. Tässä tapauksessa SQL Server ei salli muutoksia tietokantaan, mikä tarkoittaa, että insert-toiminto ei lisää mitään arvoa ja select-käskyä ei suoriteta.

Savepoint in Transactions

Tallennuspiste lisää tapahtumaan erityisen merkin, jonka avulla voimme peruuttaa kaikki tallennuspisteen jälkeen tehdyt muutokset. Sitä käytetään myös peruuttamaan tapahtuman jokin tietty osa koko tapahtuman sijaan. Voimme määrittää sen käyttämällä TALLENNA TAPAHTUMA sp_name lausunto. Seuraava esimerkki selittää tallennuspisteen käytön tapahtumissa, jotka sitovat insert-käskyn ja peruuttavat delete-käskyn.

 BEGIN TRANSACTION INSERT INTO Product VALUES(117, 'USB Drive', 1500, 10) SAVE TRANSACTION InsertStatement DELETE FROM Product WHERE Product_id = 116 SELECT * FROM Product ROLLBACK TRANSACTION InsertStatement COMMIT SELECT * FROM Product; 

Katso alla oleva tulos, jossa näemme, että tuotetunnus 116 on poistettu ja 117 on lisätty ensimmäiseen tulosteeseen. Toisessa lähdössä poistotoiminto kuitenkin peruutetaan tallennuspisteen vuoksi.

SQL Server -tapahtuma

Kuinka vapauttaa tallennuspiste tapahtumassa?

Vapauta tallennuskohtaa käytetään nimetyn tallennuspisteen poistamiseen nykyisestä tapahtumasta palauttamatta tallennuspisteen jälkeen suoritettujen kyselyiden tuloksia. MySQL:llä on tämä komento, mutta SQL Server ei anna mitään komentoa tallennuspisteen vapauttamiseksi. Sen sijaan ne vapautetaan automaattisesti sitoutumis- tai palautustapahtuman lopussa, joten meidän ei tarvitse huolehtia niistä välivaiheessa.

Implisiittinen tapahtuma SQL Serverissä

Voimme määrittää implisiittisen tapahtuman ottamalla käyttöön IMPLICIT_TRANSACTIONS-vaihtoehdon. Seuraava esimerkki selittää tämän käsitteen helposti:

 SET IMPLICIT_TRANSACTIONS ON UPDATE Product SET Quantity = 10 WHERE Product_id = 113 SELECT IIF(@@OPTIONS & 2 = 2, 'Implicit Transaction Mode ON', 'Implicit Transaction Mode OFF' ) AS 'Transaction Mode' SELECT @@TRANCOUNT AS OpenTrans COMMIT TRANSACTION SELECT @@TRANCOUNT AS OpenTrans 

Tässä kaupassa olemme käyttäneet kahta vaihtoehtoa @@OPTION ja @@TRANCOUNT. @@OPTOPN tarjoaa tiedot nykyisistä SET-asetuksista, ja @@TRANCOUNT tarjoaa BEGIN TRANSACTION -käskyn nykyisessä istunnossa.

Nyt tapahtuman suorittaminen palauttaa alla olevan tulosteen:

SQL Server -tapahtuma

Eksplisiittinen tapahtuma SQL Serverissä

Eksplisiittinen tapahtuma on määritettävä BEGIN TRANSACTION-komennolla, koska se tunnistaa nimenomaisen tapahtuman aloituspisteen. Voimme määrittää eksplisiittisen tapahtuman SQL Serverissä seuraavasti:

 BEGIN TRANSACTION [ @trans_name_variable [WITH MARK ['description']]] 

Syntaksissa trans_name-vaihtoehto ilmaisee tapahtuman yksilöllisen nimen. The @trans_name_var ilmaisee käyttäjän määrittämän muuttujan, joka tallentaa tapahtuman nimen. Lopuksi, MARK -vaihtoehdon avulla voimme merkitä tietyn tapahtuman lokitiedostoon.

hakemistosta linux-komennoissa

Eksplisiittinen tapahtuma BEGIN TRANSACTION-komennon kautta sai lukon tapahtumaan liittyvien resurssien eristystasosta riippuen. Se auttaa vähentämään lukitusongelmia. Katso alla oleva esimerkki:

 BEGIN TRANSACTION UPDATE Product SET Quantity = 15 WHERE Product_id = 114 SELECT @@TRANCOUNT AS OpenTrans COMMIT TRANSACTION SELECT @@TRANCOUNT AS OpenTrans 

Tässä on tulos:

SQL Server -tapahtuma

Merkitty tapahtuma SQL Serverissä

Merkittyä tapahtumaa käytetään lisäämään kuvaus tietylle tapahtumalle lokitiedostoissa. Voimme käyttää sitä palautuspisteenä päivämäärän ja kellonajan sijasta, kun tietokantaa palautetaan aiempaan tilaan. Meidän on tiedettävä, että merkki lisätään lokitiedostoihin vain, kun merkitty tapahtuma muuttaa tietokantaa. Voimme ymmärtää sen käsitteen seuraavan esimerkin avulla.

Oletetaan, että olemme muuttaneet tietokantaa vahingossa, emmekä tiedä tarkkaa tietojen muutoksen hetkeä; siinä tapauksessa tietojen palautus voi kestää kauan. Kuitenkin, jos käytämme merkittyjä tapahtumia, se voi olla hyödyllinen työkalu tietojen muutosten tarkan ajoituksen määrittämisessä.

Seuraava syntaksi havainnollistaa merkittyä tapahtumaa SQL Serverissä:

 BEGIN TRANSACTION trans_name WITH MARK 'description'; 

Täällä meidän on määritettävä tapahtuman nimi ja lisättävä sitten WITH MARK -vaihtoehto. Alla olevassa esimerkissä aiomme poistaa tietueita ja lisätä merkin lokitiedostoon:

 BEGIN TRANSACTION DeleteProduct WITH MARK 'Deleted Product with id = 117' DELETE Product WHERE Product_id = 117 COMMIT TRANSACTION DeleteProduct 

The logmark historia taulukko sisältyy msdb-tietokanta ja tallentaa tiedot jokaisesta merkitystä tapahtumasta, joka on sitoutunut. Suorita alla oleva lauseke saadaksesi tiedot logmarkhistory-taulukosta:

 SELECT * FROM msdb.dbo.logmarkhistory 

Nimetty tapahtuma SQL Serverissä

Voimme myös antaa nimen tapahtumallemme SQL Serverissä. On aina suositeltavaa käyttää nimettyä tapahtumaa, kun käsitellään useita tapahtumia yhdessä kyselyssä. Alla oleva esimerkki selittää, kuinka tapahtuma nimetään uudelleen:

 BEGIN TRANSACTION AddProduct INSERT INTO Product VALUES(118, 'Desktop', 25000, 15) UPDATE Product SET Product_name = 'Pen Drive' WHERE Product_id = 117 COMMIT TRANSACTION AddProduct 

Tässä on tulos:

SQL Server -tapahtuma

Johtopäätös

Tämä artikkeli antaa täydellisen yleiskatsauksen tapahtumasta SQL Server -käskyissä. Tapahtumat ovat hyödyllisiä relaatiotietokantajärjestelmissä, koska ne varmistavat tietokannan eheyden.