sql >> Database teknologi >  >> RDS >> Sqlserver

Hvad gør en transaktion omkring en enkelt erklæring?

Det gør ingenting. Alle individuelle SQL-sætninger (med sjældne undtagelser som Masseindsættelser uden log eller Truncate Table) er automatisk "I en Transaktion", uanset om du udtrykkeligt siger det eller ej.. (selvom de indsætter, opdaterer eller sletter millioner af rækker) .

EDIT:baseret på @Phillips kommentar nedenfor... I de nuværende versioner af SQL Server, selv Bulk Inserts og Truncate Table skriver nogle data til transaktionsloggen, men ikke så meget som andre operationer gør. Den kritiske forskel fra et transaktionsperspektiv er, at i disse andre typer operationer er dataene i dine databasetabeller, der ændres, ikke i loggen i en tilstand, der gør det muligt at rulle tilbage.

Alt dette betyder, at de ændringer, erklæringen foretager til data i databasen, logges i transaktionsloggen, så de kan fortrydes, hvis handlingen mislykkes.

Den eneste funktion, som kommandoerne "Begynd Transaction", "Commit Transaction" og "RollBack Transaction" giver, er at give dig mulighed for at indsætte to eller flere individuelle SQL-sætninger i den samme transaktion.

EDIT:(for at forstærke mærkets kommentar...) JA, dette kan tilskrives "overtroisk" programmering, eller det kan være en indikation af en grundlæggende misforståelse af karakteren af ​​databasetransaktioner. En mere velgørende fortolkning er, at det simpelthen er resultatet af en overdreven anvendelse af konsistens, som er upassende og endnu et eksempel på Emersons eufemisme, der:

En tåbelig konsistens er små sinds hobnroll,
tilbedt af små statsmænd og filosoffer og guddommelige



  1. SQLite JSON_VALID()

  2. Parallel unnest() og sorteringsrækkefølge i PostgreSQL

  3. Sådan automatiseres PostgreSQL 12-replikering og failover med repmgr - Del 2

  4. Python psycopg2 indsættes ikke i postgresql-tabellen