web-dev-qa-db-fra.com

TRONTATE TABLE DE TRANSACTION

La commande SQL "TRONCATE TABLE" peut-elle être utilisée dans une transaction? Je crée une application et ma table a une tonne d'enregistrements. Je souhaite supprimer tous les enregistrements, mais si l'application échoue, je devais retourner ma transaction. Supprimer chaque enregistrement prend beaucoup de temps. Je me demande si j'utilise TRUNCATE TABLE, puis-je toujours retourner la transaction et récupérer mes données en cas d'échec. Je réalise que TRONCATE TABLE n'écrire pas chaque suppression du journal des transactions, mais je me demande s'il écrit la répartition de la page sur le journal afin que la restauration fonctionne.

54
Davin Studer

Dans SQL Server, vous pouvez annuler une tronquée à partir d'une transaction. Il écrit la répartition de la page de la page au journal, comme vous l'avez mentionné.

52
womp

Dans Oracle, TRONCATE TABLE est une instruction DDL qui ne peut pas être utilisée dans une transaction (ou, plus précisément, ne peut pas être roulée). AFAIK, s'il existe une transaction en cours lorsque la déclaration est exécutée, la transaction est commise, puis le tronquage est exécuté et ne peut pas être annulé.

À Informix, le comportement de tronquage est légèrement différent; Vous pouvez utiliser Truncate dans une transaction, mais les seules déclarations autorisées après cela sont commis et retournement.

Les autres SGBD ont probablement leurs propres interprétations idiosyncratiques du comportement de la table tronquée.

16
Jonathan Leffler