sql >> Database >  >> RDS >> Sqlserver

Wat doet een transactie rond een enkel overzicht?

Het doet niets. Alle individuele SQL-statements (met zeldzame uitzonderingen zoals Bulk Inserts zonder Log of Truncate Table) zijn automatisch "In een Transactie", of u dit nu expliciet zegt of niet.. (zelfs als ze miljoenen rijen invoegen, bijwerken of verwijderen) .

EDIT:gebaseerd op de opmerking van @Phillip hieronder... In de huidige versies van SQL Server schrijven zelfs Bulk Inserts en Truncate Table sommige gegevens naar het transactielogboek, hoewel niet zoveel als andere bewerkingen. Het cruciale verschil vanuit een transactieperspectief is dat bij deze andere soorten bewerkingen de gegevens in uw databasetabellen die worden gewijzigd, niet in het logboek staan ​​in een staat die het mogelijk maakt om terug te draaien.

Dit betekent dat de wijzigingen die de verklaring aanbrengt in gegevens in de database worden vastgelegd in het transactielogboek, zodat ze ongedaan kunnen worden gemaakt als de bewerking mislukt.

De enige functie die de opdrachten "Transactie starten", "Transactie vastleggen" en "Transactie terugdraaien" bieden, is dat u twee of meer afzonderlijke SQL-instructies in dezelfde transactie kunt plaatsen.

EDIT:(om het commentaar van de merken kracht bij te zetten...) JA, dit kan worden toegeschreven aan "bijgelovige" programmering, of het kan een indicatie zijn van een fundamenteel misverstand over de aard van databasetransacties. Een meer liefdadige interpretatie is dat het eenvoudigweg het resultaat is van een overmatige toepassing van consistentie die ongepast is en nog een ander voorbeeld van Emersons eufemisme dat:

Een dwaze consequentie is de kobold van kleine geesten,
aanbeden door kleine staatslieden en filosofen en godgeleerden



  1. Hoe een record te krijgen met maximale waarde in MySQL

  2. Hoe detecteer je dat de transactie al is gestart?

  3. Veroorzaakt door:android.database.sqlite.SQLiteException:geen dergelijke tabel:BOOK (code 1 SQLITE_ERROR)

  4. Waarden krijgen die geen cijfers bevatten in SQL Server