Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Que fait une transaction autour d'une seule instruction ?

Cela ne fait rien. Toutes les instructions SQL individuelles (à de rares exceptions telles que les insertions en bloc sans journal ou la table tronquée) sont automatiquement "dans une transaction", que vous le disiez explicitement ou non... (même si elles insèrent, mettent à jour ou suppriment des millions de lignes) .

EDIT :basé sur le commentaire de @ Phillip ci-dessous... Dans les versions actuelles de SQL Server, Even Bulk Inserts et Truncate Table écrivent some données au journal des transactions, mais pas autant que les autres opérations. La distinction essentielle d'un point de vue transactionnel est que, dans ces autres types d'opérations, les données de vos tables de base de données en cours de modification ne se trouvent pas dans le journal dans un état permettant leur annulation.

Tout cela signifie que les modifications apportées par l'instruction aux données de la base de données sont consignées dans le journal des transactions afin qu'elles puissent être annulées si l'opération échoue.

La seule fonction fournie par les commandes "Begin Transaction", "Commit Transaction" et "RollBack Transaction" est de vous permettre de placer deux ou plusieurs instructions SQL individuelles dans la même transaction.

EDIT :(pour renforcer le commentaire des marques...) OUI, cela pourrait être attribué à une programmation "superstitieuse", ou cela pourrait être une indication d'une incompréhension fondamentale de la nature des transactions de base de données. Une interprétation plus charitable est que c'est simplement le résultat d'une application excessive de cohérence qui est inappropriée et encore un autre exemple de l'euphémisme d'Emerson qui :

Une cohérence insensée est le lutin des petits esprits,
adoré par les petits hommes d'État, les philosophes et les divins