sql >> Databáze >  >> RDS >> Sqlserver

Co dělá transakce kolem jednoho výpisu?

Nedělá to nic. Všechny jednotlivé příkazy SQL (se vzácnými výjimkami, jako jsou hromadné vkládání bez protokolu nebo zkrácená tabulka) jsou automaticky „v transakci“, ať už to výslovně řeknete nebo ne. (i když vloží, aktualizují nebo odstraní miliony řádků) .

EDIT:na základě komentáře @Phillip níže... V aktuálních verzích SQL Serveru Even Bulk Inserts a Truncate Table zapisují některé data do transakčního protokolu, i když ne v takovém množství jako jiné operace. Z transakčního hlediska je zásadní rozdíl v tom, že v těchto jiných typech operací nejsou data ve vašich databázových tabulkách upravovaná v protokolu ve stavu, který umožňuje jejich vrácení zpět.

To vše znamená, že změny provedené příkazem v datech v databázi jsou zaznamenány do protokolu transakcí, takže je lze vrátit zpět, pokud operace selže.

Jedinou funkcí, kterou poskytují příkazy "Zahájit transakci", "Potvrdit transakci" a "Odvolat transakci", je umožnit vložit dva nebo více jednotlivých příkazů SQL do stejné transakce.

EDIT:(pro posílení komentáře ke známkám...) ANO, mohlo by to být přičítáno „pověrčivému“ programování, nebo by to mohlo být známkou zásadního nepochopení podstaty databázových transakcí. Dobročinnější výklad je, že je to prostě výsledek nadměrného uplatňování konzistence, což je nevhodné, a další příklad Emersonova eufemismu, který:

Pošetilá důslednost je skřet malých myslí,
zbožňovaný malými státníky, filozofy a bohy



  1. Váš dokonalý průvodce SQL Join:CROSS JOIN – část 3

  2. Zřetězení řetězců SQL Server s hodnotou Null

  3. Jak se mohu připojit k serveru Oracle Database 11g prostřednictvím řetězce tunelů ssh (dvojitý tunel, server ve firemní síti)?

  4. Budou dotazy ANSI JOIN vs. dotazy bez ANSI JOIN fungovat jinak?