sql >> Databasteknik >  >> RDS >> Sqlserver

Vad gör en transaktion kring ett enskilt uttalande?

Det gör ingenting. Alla individuella SQL-satser (med sällsynta undantag som bulkinfogningar utan logg eller Trunkerat tabell) är automatiskt "I en transaktion" oavsett om du uttryckligen säger det eller inte... (även om de infogar, uppdaterar eller tar bort miljontals rader) .

EDIT:baserat på @Phillips kommentar nedan... I nuvarande versioner av SQL Server skriver även Bulk Inserts och Truncate Table några data till transaktionsloggen, men inte lika mycket som andra operationer gör. Den kritiska skillnaden ur ett transaktionsperspektiv är att i dessa andra typer av operationer finns inte data i dina databastabeller som ändras i loggen i ett tillstånd som gör att det kan återställas.

Allt detta innebär är att ändringarna som uttalandet gör av data i databasen loggas i transaktionsloggen så att de kan ångras om operationen misslyckas.

Den enda funktion som kommandona "Börja transaktion", "Bekräfta transaktion" och "Återställ transaktion" tillhandahåller är att låta dig lägga in två eller flera individuella SQL-satser i samma transaktion.

EDIT:(för att förstärka märken kommentar...) JA, detta kan tillskrivas "vidskeplig" programmering, eller så kan det vara en indikation på ett grundläggande missförstånd av karaktären av databastransaktioner. En mer välgörande tolkning är att det helt enkelt är resultatet av en överanvändning av konsekvens som är olämplig och ytterligare ett exempel på Emersons eufemism som:

En dåraktig konsekvens är små sinnens hobgoblin,
tillbedjas av små statsmän, filosofer och gudomar



  1. MySQL Infoga kommando vs T-SQL frågesyntax med exempel

  2. Mer om CXPACKET Waits:Skewed Parallelism

  3. Hur SUBSTR()-funktionen fungerar i MySQL

  4. Oracle Data Mining (ODM) – Installation och installation