63 votes

Tronquer la table dans la transaction

Est-ce que la commande SQL "truncate table" peut être utilisée dans une transaction? Je suis en train de créer une application et ma table contient énormément d'enregistrements. Je veux supprimer tous les enregistrements, mais si l'application échoue je veux pouvoir annuler ma transaction. Supprimer chaque enregistrement prend énormément de temps. Je me demande si j'utilise truncate table, est-ce que je peux quand même annuler la transaction et récupérer mes données en cas d'échec. Je sais que truncate table ne note pas chaque suppression dans le journal des transactions, mais je me demande s'il note la désallocation des pages dans le journal pour que l'annulation fonctionne.

1 votes

Je devrais avoir précisé que j'utilise le serveur MSSQL 2005.

63voto

womp Points 71924

Dans SQL Server, vous pouvez annuler un TRUNCATE à partir d'une transaction. Il écrit effectivement la désallocation de page dans le journal, comme vous l'avez mentionné.

18voto

Jonathan Leffler Points 299946

En Oracle, TRUNCATE TABLE est une déclaration DDL qui ne peut pas être utilisée dans une transaction (ou, plus précisément, ne peut pas être annulée). À ma connaissance, s'il y a une transaction en cours lorsque la déclaration est exécutée, la transaction est validée, puis le TRUNCATE est exécuté et ne peut pas être annulé.

Dans Informix, le comportement de TRUNCATE est légèrement différent ; vous pouvez utiliser TRUNCATE dans une transaction, mais les seules déclarations autorisées après cela sont COMMIT et ROLLBACK.

D'autres SGBD ont probablement leurs propres interprétations idiosyncratiques du comportement de TRUNCATE TABLE.

0voto

Krunal Suthar Points 21

Si vous lisez la documentation officielle de PostgreSQL, vous verrez que la commande TRUNCATE TABLE est sécurisée en termes de transaction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X