Beskriv transaksjoner

Fullført

En transaksjon er én eller flere T-SQL-setninger som behandles som en enhet. Hvis én enkelt transaksjon mislykkes, mislykkes alle setningene. Hvis en transaksjon lykkes, vet du at alle dataendringssetningene i transaksjonen var vellykket og forpliktet til databasen.

Transaksjoner sikrer at alle setninger i en transaksjon enten lykkes eller alle mislykkes, ingen delvis fullføring er tillatt. Transaksjoner omslutter operasjoner som logisk må forekomme sammen, for eksempel flere oppføringer i relaterte tabeller som er en del av én enkelt operasjon.

Vurder en bedrift som lagrer kjøp i en sales.order-tabell og betalinger i en sales.payment-tabell . Når noen kjøper noe, må begge tabellene oppdateres. Hvis dette implementeres uten transaksjoner, og det oppstår en feil når betalingen skrives til databasen, vil sales.order-innsettingen fremdeles bli utført, slik at betalingstabellen blir stående uten en oppføring.

Når dette implementeres med transaksjoner, utføres begge oppføringene eller ingen av oppføringene utføres. Hvis det oppstår en feil under skriving av betalingen til tabellen, rulles også ordreinnsetningen tilbake. Dette betyr at databasen alltid er i en konsekvent tilstand.

Diagram som viser forskjellen mellom å bruke transaksjoner og ikke å bruke transaksjoner.

Det bør bemerkes at dette refererer til alvorlige feil, for eksempel maskinvare- eller nettverksfeil. Feil i SQL-setninger vil bare føre til at transaksjonen rulles tilbake under visse omstendigheter, og det er viktig å se gjennom de påfølgende enhetene i denne modulen for å forstå konsekvensene av å bruke transaksjoner fullt ut.

Det finnes ulike typer transaksjoner:

Eksplisitte transaksjoner

Nøkkelordene BEGIN TRANSACTION og enten COMMIT eller ROLLBACK starter og avslutter hver gruppe med setninger. Dette gjør at du kan angi hvilke setninger som må utføres eller rulles sammen igjen.

Implisitte transaksjoner

En transaksjon startes når den forrige transaksjonen er fullført. Hver transaksjon fullføres eksplisitt med en COMMIT- eller ROLLBACK-setning.

ACID-egenskaper

Oltp-systemer (Online Transactional Processing) krever transaksjoner for å oppfylle «ACID»-egenskapene:

  • Atomitet – hver transaksjon behandles som én enkelt enhet, som lykkes fullstendig eller mislykkes fullstendig. En transaksjon som innebar å debitere midler fra én konto og kreditere det samme beløpet til en annen konto, må for eksempel fullføre begge handlingene. Hvis en av handlingene ikke kan fullføres, må den andre handlingen mislykkes.
  • Konsekvens – transaksjoner kan bare ta dataene i databasen fra én gyldig tilstand til en annen. Hvis du vil fortsette debet- og kredittvurderingseksemplet ovenfor, må den fullførte tilstanden til transaksjonen gjenspeile overføringen av midler fra én konto til den andre.
  • Isolering – samtidige transaksjoner kan ikke forstyrre hverandre, og må resultere i en konsekvent databasetilstand. Selv om transaksjonen for å overføre midler fra én konto til en annen er i gang, må for eksempel en annen transaksjon som kontrollerer saldoen på disse kontoene, returnere konsekvente resultater – saldokontrolltransaksjonen kan ikke hente en verdi for én konto som gjenspeiler saldoen før overføringen, og en verdi for den andre kontoen som gjenspeiler saldoen etter overføringen.
  • Holdbarhet – når en transaksjon er utført, forblir den forpliktet. Når overføringstransaksjonen for kontoen er fullført, beholdes de reviderte kontosaldoene slik at selv om databasesystemet skulle slås av, gjenspeiles den forpliktede transaksjonen når den slås på igjen.