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.
Réponses
Trop de publicités?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.
1 votes
Je devrais avoir précisé que j'utilise le serveur MSSQL 2005.