Beskriv posteringer

Fuldført

En transaktion er en eller flere T-SQL-sætninger, der behandles som en enhed. Hvis en enkelt transaktion mislykkes, mislykkes alle sætninger. Hvis en transaktion lykkes, ved du, at alle dataændringssætninger i transaktionen blev udført og bekræftet i databasen.

Transaktioner sikrer, at alle sætninger i en transaktion enten lykkes eller alle mislykkes, og at der ikke er tilladt delvis fuldførelse. Transaktioner indkapsler handlinger, der logisk skal forekomme sammen, f.eks. flere poster i relaterede tabeller, der er en del af en enkelt handling.

Overvej en virksomhed, der gemmer køb i tabellen Sales.Order og betalinger i tabellen Sales.Payment . Når nogen køber noget, skal begge tabeller opdateres. Hvis dette implementeres uden transaktioner, og der opstår en fejl, når betalingen skrives til databasen, vil indsættelsen af Sales.Order stadig blive bekræftet, så betalingstabellen ikke er angivet.

Når dette implementeres med transaktioner, foretages enten begge poster, eller der foretages ingen af posterne. Hvis der er en fejl under skrivning af betalingen til tabellen, annulleres ordreindlægget også. Det betyder, at databasen altid er i ensartet tilstand.

Diagram, der viser forskellen mellem at bruge transaktioner og ikke at bruge transaktioner.

Det skal bemærkes, at dette refererer til alvorlige fejl, f.eks. hardware- eller netværksfejl. Fejl i SQL-sætninger medfører kun, at transaktionen annulleres under visse omstændigheder, og det er vigtigt at gennemse de efterfølgende enheder i dette modul for fuldt ud at forstå konsekvenserne af at bruge transaktioner.

Der er forskellige typer transaktioner:

Eksplicitte transaktioner

Nøgleordene BEGIN TRANSACTION og enten COMMIT eller ROLLBACK starter og afslutter hvert batch af sætninger. Dette giver dig mulighed for at angive, hvilke sætninger der skal enten bekræftes eller tilbageføres sammen.

Implicitte transaktioner

En transaktion startes, når den forrige transaktion er fuldført. Hver transaktion fuldføres eksplicit med en COMMIT- eller ROLLBACK-sætning.

ACID-egenskaber

OLTP-systemer (Online Transactional Processing) kræver transaktioner, der opfylder "ACID"-karakteristika:

  • Atomicity – hver transaktion behandles som en enkelt enhed, som lykkes helt eller mislykkes fuldstændigt. En transaktion, der involverede debitering af midler fra én konto og kreditering af det samme beløb til en anden konto, skal f.eks. fuldføre begge handlinger. Hvis en af handlingerne ikke kan fuldføres, skal den anden handling mislykkes.
  • Konsistens – transaktioner kan kun tage dataene i databasen fra én gyldig tilstand til en anden. Hvis du vil fortsætte ovenstående eksempel på debitering og kredit, skal transaktionens fuldførte tilstand afspejle overførslen af midler fra den ene konto til den anden.
  • Isolation – samtidige transaktioner kan ikke forstyrre hinanden og skal resultere i en ensartet databasetilstand. Mens posteringen for at overføre midler fra én konto til en anden f.eks. er i gang, skal en anden transaktion, der kontrollerer saldoen på disse konti, returnere ensartede resultater – saldokontroltransaktionen kan ikke hente en værdi for én konto, der afspejler saldoen før overførslen, og en værdi for den anden konto, der afspejler saldoen efter overførslen.
  • Holdbarhed – når en transaktion er blevet bekræftet, forbliver den bekræftet. Når kontooverførselstransaktionen er fuldført, bevares de reviderede kontosaldi, så selvom databasesystemet skulle være slået fra, afspejles den bekræftede transaktion, når den tændes igen.