web-dev-qa-db-fra.com

Quelle est la différence entre TRUNCATE et DELETE en SQL?

J'ai écrit une réponse à cette question par erreur en réponse à une question sur la différence entre DROP et TRUNCATE, mais j'ai pensé qu'il est dommage de ne pas partager, alors je posterai ma propre réponse à ma propre question ... est-ce même éthique? :)

Edit: Si votre réponse est spécifique à la plate-forme, pouvez-vous l'indiquer?.

217
David Aldridge

Voici une liste de différences. J'ai mis en évidence les fonctionnalités spécifiques à Oracle et j'espère que la communauté pourra également ajouter la différence spécifique des autres fournisseurs. Les différences communes à la plupart des fournisseurs peuvent aller directement sous les en-têtes, les différences étant soulignées ci-dessous.


Aperçu général

Si vous souhaitez supprimer rapidement toutes les lignes d'une table et que vous êtes vraiment sûr de vouloir le faire, et que vous ne disposez pas de clés étrangères dans les tables, alors TRUNCATE sera probablement plus rapide que DELETE. .

Comme indiqué ci-dessous, divers problèmes spécifiques au système doivent être pris en compte.


Type de déclaration

Supprimer est DML, Truncate est DDL


Commit et Rollback

Variable par vendeur

Serveur SQL

Truncate peut être annulé.

PostgreSQL

Truncate peut être annulé.

Oracle

Dans la mesure où TRUNCATE est un fichier DDL, il implique deux validations, une avant et une après l'exécution de l'instruction. Truncate ne peut donc pas être annulé et un échec dans le processus de troncature aura quand même généré un commit.

Cependant, voir Flashback ci-dessous.


Récupération de l'espace

Supprimer ne récupère pas d'espace, Truncate récupère de l'espace

Oracle

Si vous utilisez la clause REUSE STORAGE, les segments de données ne sont pas désalloués, ce qui peut être légèrement plus efficace si la table doit être rechargée avec des données. La limite supérieure est réinitialisée.


Portée de la rangée

Supprimer peut être utilisé pour supprimer toutes les lignes ou seulement un sous-ensemble de lignes. Truncate supprime toutes les lignes.

Oracle

Lorsqu'une table est partitionnée, les partitions individuelles peuvent être tronquées isolément. Une suppression partielle de toutes les données de la table est donc possible.


Types d'objet

Supprimer peut être appliqué aux tables et aux tables à l'intérieur d'un cluster. Troncature s'applique uniquement aux tables ou à la totalité du cluster. (Peut être spécifique à Oracle)


Identité d'objet de données

Oracle

Supprimer n'affecte pas l'ID d'objet de données, mais tronquer affecte un nouvel ID d'objet de données sauf il n'y a jamais eu d'insertion dans la table depuis sa création Même une seule insertion annulée entraîne la création d'un nouvel objet de données id à affecter lors de la troncature.


Flashback (Oracle)

Le flashback fonctionne avec les suppressions, mais une troncature empêche le flashback aux états antérieurs à l'opération.

Cependant, à partir de 11gR2, la fonctionnalité FLASHBACK ARCHIVE le permet, sauf dans Express Edition.

Utilisation de FLASHBACK dans Oraclehttp://docs.Oracle.com/cd/E11882_01/appdev.112/e41502/adfns_flashback.htm#ADFNS638


Privilèges

Variable

Oracle

La suppression peut être accordée sur une table à un autre utilisateur ou à un autre rôle, mais troncature ne peut être effectuée sans utiliser un droit DROP ANY TABLE.


Refaire/Annuler

Supprimer génère une petite quantité de répétition et une grande quantité d'annulation. Tronquer génère une quantité négligeable de chacun.


Les index

Oracle

Une opération tronquée rend à nouveau utilisable des index inutilisables. Supprimer ne pas.


Clés étrangères

Un tronqué ne peut pas être appliqué lorsqu'une clé étrangère activée fait référence à la table. Le traitement avec suppression dépend de la configuration des clés étrangères.


Verrouillage de table

Oracle

Truncate nécessite un verrou de table exclusif, la suppression nécessite un verrou de table partagé. Désactiver les verrous de table est donc un moyen d’empêcher les opérations tronquées sur une table.


Déclencheurs

Les déclencheurs DML ne se déclenchent pas sur une troncature.

Oracle

Les déclencheurs DDL sont disponibles.


Exécution à distance

Oracle

Truncate ne peut pas être émis sur un lien de base de données.


Colonnes d'identité

Serveur SQL

Truncate réinitialise la séquence pour les types de colonne IDENTITY, la suppression ne le fait pas.


Ensemble de résultats

Dans la plupart des implémentations, une instruction DELETE peut renvoyer au client les lignes supprimées.

par exemple. dans un sous-programme Oracle PL/SQL, vous pouvez:

DELETE FROM employees_temp
WHERE       employee_id = 299 
RETURNING   first_name,
            last_name
INTO        emp_first_name,
            emp_last_name;
217
David Aldridge

La différence entre tronquer et supprimer est listée ci-dessous:

+----------------------------------------+----------------------------------------------+
|                Truncate                |                    Delete                    |
+----------------------------------------+----------------------------------------------+
| We can't Rollback after performing     | We can Rollback after delete.                |
| Truncate.                              |                                              |
|                                        |                                              |
| Example:                               | Example:                                     |
| BEGIN TRAN                             | BEGIN TRAN                                   |
| TRUNCATE TABLE tranTest                | DELETE FROM tranTest                         |
| SELECT * FROM tranTest                 | SELECT * FROM tranTest                       |
| ROLLBACK                               | ROLLBACK                                     |
| SELECT * FROM tranTest                 | SELECT * FROM tranTest                       |
+----------------------------------------+----------------------------------------------+
| Truncate reset identity of table.      | Delete does not reset identity of table.     |
+----------------------------------------+----------------------------------------------+
| It locks the entire table.             | It locks the table row.                      |
+----------------------------------------+----------------------------------------------+
| Its DDL(Data Definition Language)      | Its DML(Data Manipulation Language)          |
| command.                               | command.                                     |
+----------------------------------------+----------------------------------------------+
| We can't use WHERE clause with it.     | We can use WHERE to filter data to delete.   |
+----------------------------------------+----------------------------------------------+
| Trigger is not fired while truncate.   | Trigger is fired.                            |
+----------------------------------------+----------------------------------------------+
| Syntax :                               | Syntax :                                     |
| 1) TRUNCATE TABLE table_name           | 1) DELETE FROM table_name                    |
|                                        | 2) DELETE FROM table_name WHERE              |
|                                        |    example_column_id IN (1,2,3)              |
+----------------------------------------+----------------------------------------------+
144
Bhaumik Patel

DROP

La commande DROP supprime une table de la base de données. Toutes les lignes, les index et les privilèges des tables seront également supprimés. Aucun déclencheur DML ne sera déclenché. L'opération ne peut pas être annulée.

TRONQUER

TRUNCATE supprime toutes les lignes d'une table. L'opération ne peut pas être annulée et aucun déclencheur ne sera déclenché. En tant que tel, TRUCATE est plus rapide et n’utilise pas autant d’espace annulé qu’un DELETE.

EFFACER

La commande DELETE est utilisée pour supprimer des lignes d'une table. Une clause WHERE peut être utilisée pour ne supprimer que certaines lignes. Si aucune condition WHERE n'est spécifiée, toutes les lignes seront supprimées. Après avoir effectué une opération DELETE, vous devez COMMIT ou ROLLBACK la transaction pour rendre la modification permanente ou l'annuler. Notez que cette opération provoquera l'activation de tous les déclencheurs DELETE sur la table.

De: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands

29
Mohit Singh

Toutes les bonnes réponses, auxquelles je dois ajouter:

Puisque TRUNCATE TABLE est une commande DDL ( Langage de définition de données ) et non une commande DML ( Data Manipulation Langauge ), le Delete Triggers ne s'exécute pas.

22
polara

Avec SQL Server ou MySQL, s'il existe un PK avec incrémentation automatique, tronquer réinitialisera le compteur.

15
mathieu

Récapitulatif de la suppression des messages tronqués sur le serveur SQL
Pour l'article complet, suivez ce lien: http://codaffection.com/sql-server-article/delete-vs-truncate-in-sql-server/

 enter image description here

Tiré de l'article de dotnet mob: Supprimer Vs Truncate dans SQL Server

14
Shamseer K

"Tronquer ne consigne rien" est correct. J'irais plus loin:

Truncate n'est pas exécuté dans le contexte d'une transaction. 

L'avantage de vitesse de tronquer sur supprimer devrait être évident. Cet avantage varie de trivial à énorme, selon votre situation.

Cependant, j'ai vu tronquer involontairement une intégrité référentielle brisée et violer d'autres contraintes. Le pouvoir que vous gagnez en modifiant des données hors d’une transaction doit être mis en balance avec la responsabilité dont vous héritez lorsque vous marchez sur la corde raide sans filet.

11
Walter Mitty

Oui, DELETE est plus lent, TRUNCATE est plus rapide. Pourquoi? 

DELETE doit lire les enregistrements, vérifier les contraintes, mettre à jour le bloc, mettre à jour les index et générer redo/undo. Tout cela prend du temps.

TRUNCATE ajuste simplement un pointeur dans la base de données pour la table (High Water Mark) et poof! les données sont parties. 

Ceci est spécifique à Oracle, autant que je sache.

6
DCookie

TRUNCATE est l'instruction DDL alors que DELETE est une instruction DML. Voici les différences entre les deux: 

  1. Comme TRUNCATE est une instruction DDL ( Langage de définition des données ), il n’est pas nécessaire d’engager un commit pour rendre les modifications permanentes. Et c’est la raison pour laquelle les lignes supprimées par tronqué ne peuvent pas être restaurées. DELETE est par contre une instruction DML ( Langage de manipulation de données ) qui nécessite donc une validation explicite pour rendre son effet permanent.

  2. TRUNCATE supprime toujours toutes les lignes d'une table, laissant la table vide et la structure de la table intacte alors que DELETE peut supprimer conditionnellement si la clause where est utilisée.

  3. Les lignes supprimées par l'instruction TRUNCATE TABLE ne peuvent pas être restaurées et vous ne pouvez pas spécifier la clause where dans l'instruction TRUNCATE.

  4. Les instructions TRUNCATE ne déclenchent pas les déclencheurs, contrairement au déclencheur de suppression de l'instruction DELETE

Ici est le très bon lien pertinent pour le sujet.

5
Sachin Chourasiya

Si vous avez accidentellement supprimé toutes les données de la table à l’aide de Supprimer/Tronquer. Vous pouvez annuler une transaction validée. Restaurez la dernière sauvegarde et exécutez le journal des transactions jusqu'au moment où supprimer/tronquer est sur le point de se produire.

Les informations connexes ci-dessous proviennent de un article de blog :

Pendant que nous travaillons sur la base de données, nous utilisons Delete et Truncate sans connaître les différences entre eux. Dans cet article, nous discuterons la différence entre Supprimer et tronquer en SQL.

Effacer:

  • Supprimer est une commande DML.
  • L'instruction de suppression est exécutée à l'aide d'un verrou de ligne, chaque ligne de la table est verrouillée pour la suppression.
  • Nous pouvons spécifier des filtres dans la clause where.
  • Il supprime les données spécifiées si la condition existe.
  • Supprimer des activités un déclencheur parce que l'opération est enregistrée individuellement.
  • Plus lent que Truncate, car il conserve les journaux

Tronquer

  • Truncate est une commande DDL.
  • Truncate table toujours verrouiller la table et la page mais pas chaque ligne. Comme il supprime toutes les données.
  • Impossible d'utiliser la condition Where. 
  • Il supprime toutes les données.
  • La table Truncate ne peut pas activer de déclencheur car l'opération n'enregistre pas les suppressions de lignes individuelles.
  • Plus rapide en termes de performances, car il ne conserve aucun journal.

Remarque: Supprimer et tronquer les deux peuvent être annulés lorsqu'ils sont utilisés avec Transaction. Si la transaction est terminée, signifie engagé, nous ne pouvons pas rollback Commande tronquée, mais nous pouvons toujours annuler la commande Supprimer depuis les fichiers journaux, comme delete write les enregistre dans le fichier journal au cas où il s'agirait de nécessaire pour revenir à l'avenir à partir des fichiers journaux.

Si vous avez une contrainte de clé étrangère faisant référence à la table, vous êtes en essayant de tronquer, cela ne fonctionnera pas même si la table de renvoi n'a pas les données qu'il contient. En effet, la vérification de la clé étrangère est effectuée avec DDL plutôt que DML. Cela peut être contourné en désactivant temporairement le fichier contrainte (s) de clé étrangère à la table.

Supprimer la table est une opération consignée. Donc, la suppression de chaque ligne obtient enregistré dans le journal des transactions, ce qui le ralentit. Tronquer la table supprime également toutes les lignes d'une table, mais il n'enregistre pas la suppression de chaque ligne indique à la place la désallocation des pages de données du fichier table, ce qui le rend plus rapide.

~ Si vous avez accidentellement supprimé toutes les données de la table en utilisant Supprimer/tronquer. Vous pouvez annuler une transaction validée. Restaurez le dernière sauvegarde et exécution du journal des transactions jusqu'au moment où Supprimer/Truncate est sur le point de se produire.

5
wpzone4u

Dans SQL Server 2005, j’estime que vous pouvez annuler une action tronquée

3
Xander

EFFACER

La commande DELETE est utilisée pour supprimer des lignes d'une table. Une clause WHERE peut être utilisée pour ne supprimer que certaines lignes. Si aucune condition WHERE n'est spécifiée, toutes les lignes seront supprimées. Après avoir effectué une opération DELETE, vous devez COMMIT ou ROLLBACK la transaction pour rendre la modification permanente ou l'annuler. Notez que cette opération provoquera l'activation de tous les déclencheurs DELETE sur la table.

TRONQUER

TRUNCATE supprime toutes les lignes d'une table. L'opération ne peut pas être annulée et aucun déclencheur ne sera déclenché. En tant que tel, TRUCATE est plus rapide et n’utilise pas autant d’espace annulé qu’un DELETE.

DROP

La commande DROP supprime une table de la base de données. Toutes les lignes, les index et les privilèges des tables seront également supprimés. Aucun déclencheur DML ne sera déclenché. L'opération ne peut pas être annulée.


DROP et TRUNCATE sont des commandes DDL, alors que DELETE est une commande DML. Par conséquent, les opérations DELETE peuvent être annulées (annulées), alors que les opérations DROP et TRUNCATE ne peuvent pas être annulées.

De: http://www.orafaq.com/faq/difference_between_truncate_delete_and_drop_commands

3
MyUserQuestion

TRUNCATE peut être annulé s'il est encapsulé dans une transaction. 

S'il vous plaît voir les deux références ci-dessous et tester vous-même: -

http://blog.sqlauthority.com/2007/12/26/sql-server-truncate-cant-be-rolled-back-using-log-files-after-transaction-session-is-closed/

http://sqlblog.com/blogs/kalen_delaney/archive/2010/10/12/tsql-tuesday-11-rolling-back-truncate-table.aspx

TRUNCATE vs. DELETE est l’une des questions les plus connues au cours des entretiens SQL. Assurez-vous simplement de l'expliquer correctement à l'intervieweur, sinon le travail pourrait vous coûter cher. Le problème est que peu d’entre eux sont au courant et qu’ils jugeront donc probablement la réponse fausse si vous leur dites que YES Truncate peut être annulé.

2
SQLnbe

Une petite correction à la réponse originale - supprimer génère également des quantités importantes de répétition (annulation étant elle-même protégée par répétition) Cela peut être vu à partir de la sortie autotrace:

SQL> delete from t1;

10918 rows deleted.

Elapsed: 00:00:00.58

Execution Plan
----------------------------------------------------------
   0      DELETE STATEMENT Optimizer=FIRST_ROWS (Cost=43 Card=1)
   1    0   DELETE OF 'T1'
   2    1     TABLE ACCESS (FULL) OF 'T1' (TABLE) (Cost=43 Card=1)




Statistics
----------------------------------------------------------
         30  recursive calls
      12118  db block gets
        213  consistent gets
        142  physical reads
    3975328  redo size
        441  bytes sent via SQL*Net to client
        537  bytes received via SQL*Net from client
          4  SQL*Net roundtrips to/from client
          2  sorts (memory)
          0  sorts (disk)
      10918  rows processed
2
CaptainPicard

Une autre différence entre les deux opérations est que si la table contient une colonne d'identité, le compteur de cette colonne est réinitialisé 1 (ou à la valeur de départ définie pour la colonne) sous TRUNCATE. DELETE n'a pas cet effet.

1
westyside

EFFACER

DELETE is a DML command
DELETE you can rollback
Delete = Only Delete- so it can be rolled back
In DELETE you can write conditions using WHERE clause
Syntax – Delete from [Table] where [Condition]

TRONQUER

TRUNCATE is a DDL command
You can't rollback in TRUNCATE, TRUNCATE removes the record permanently
Truncate = Delete+Commit -so we can't roll back
You can't use conditions(WHERE clause) in TRUNCATE
Syntax – Truncate table [Table]

Pour plus de détails, visitez

http://www.zilckh.com/what-is-the-difference-between-truncate-and-delete/

1
user27332

La plus grande différence est que tronquer est une opération non journalisée, tandis que la suppression est.

Cela signifie simplement qu'en cas de panne de la base de données, vous ne pouvez pas récupérer les données sur lesquelles truncate est exploitée, mais vous pouvez le supprimer. 

Plus de détails ici

1
Learning

Voici ma réponse détaillée sur la différence entre DELETE et TRUNCATE dans SQL Server

Remove Data: Tout d'abord, vous pouvez utiliser les deux pour supprimer les lignes de la table.
Mais un DELETE peut être utilisé pour supprimer les lignes non seulement d'une table mais également d'une VIEW ou du résultat d'un OPENROWSET ou d'OPENQUERY en fonction des capacités du fournisseur. 

Clause FROM: avec DELETE, vous pouvez également supprimer des lignes d'une table/vue/rowset_function_limited en fonction des lignes d'une autre table à l'aide d'une autre clause FROM. Dans cette clause FROM, vous pouvez également écrire des conditions JOIN normales. En réalité, vous pouvez créer une instruction DELETE à partir d’une instruction SELECT qui ne contient aucune fonction d’agrégat en remplaçant SELECT par DELETE et en supprimant les noms de colonne.
Avec TRUNCATE, vous ne pouvez pas faire cela. 

OÙ: un TRUNCATE ne peut pas avoir de conditions WHERE, mais un DELETE le peut. Cela signifie qu'avec TRUNCATE, vous ne pouvez pas supprimer une ligne ou un groupe de lignes spécifique. TRUNCATE TABLE est similaire à l’instruction DELETE sans clause WHERE.

Performance: TRUNCATE TABLE est plus rapide et utilise moins de ressources système et de journal des transactions. Et l'une des raisons est les verrous utilisés par les deux déclarations. L'instruction DELETE est exécutée à l'aide d'un verrou de ligne, chaque ligne de la table est verrouillée pour la suppression. TRUNCATE TABLE verrouille toujours la table et la page, mais pas chaque ligne.

Journal des transactions: L'instruction DELETE supprime les lignes une par une et crée des entrées individuelles dans le journal des transactions pour chaque ligne.
TRUNCATE TABLE supprime les données en désallouant les pages de données utilisées pour stocker les données de la table et enregistre uniquement les désallocations de page dans le journal des transactions.

Pages: après l'exécution d'une instruction DELETE, la table peut toujours contenir des pages vides. TRUNCATE supprime les données en libérant les pages de données utilisées pour stocker les données de la table.

Trigger: TRUNCATE n'active pas les déclencheurs de suppression de la table. Vous devez donc faire très attention lorsque vous utilisez TRUNCATE. Il ne faut jamais utiliser un TRUNCATE si delete Trigger est défini sur la table pour effectuer une action de nettoyage ou de journalisation automatique lorsque des lignes sont supprimées.

Identity Column: avec TRUNCATE si la table contient une colonne d'identité, le compteur de cette colonne est réinitialisé sur la valeur de départ définie pour la colonne. Si aucune graine n'a été définie, la valeur par défaut 1 est utilisée. DELETE ne réinitialise pas le compteur d’identité. Donc, si vous souhaitez conserver le compteur d'identité, utilisez plutôt SUPPRIMER.

Replication: DELETE peut être utilisé par rapport à la table utilisée dans la réplication transactionnelle ou la réplication de fusion.
Bien que TRUNCATE ne puisse pas être utilisé avec les tables impliquées dans la réplication transactionnelle ou la réplication de fusion. 

Rollback: l'instruction DELETE peut être annulée.
TRUNCATE peut également être annulé à condition qu’il soit inclus dans un bloc TRANSACTION et que la session ne soit pas fermée. Une fois la session fermée, vous ne pourrez plus annuler TRUNCATE.

Restrictions: L'instruction DELETE peut échouer si elle enfreint un déclencheur ou tente de supprimer une ligne référencée par des données d'une autre table avec une contrainte FOREIGN KEY. Si DELETE supprime plusieurs lignes et si l'une des lignes supprimées enfreint un déclencheur ou une contrainte, l'instruction est annulée, une erreur est renvoyée et aucune ligne n'est supprimée.
Et si DELETE est utilisé contre View, cette vue doit être une vue pouvant être mise à jour. TRUNCATE ne peut pas être utilisé par rapport à la table utilisée dans la vue indexée.
TRUNCATE ne peut pas être utilisé par rapport à la table référencée par une contrainte FOREIGN KEY, sauf si une table possède une clé étrangère qui se référence elle-même.

1
Mangal Pardeshi

Instruction DELETE: cette commande supprime uniquement les lignes de la table en fonction de la condition donnée dans la clause where ou supprime toutes les lignes de la table si aucune condition n'est spécifiée. Mais cela ne libère pas l'espace contenant la table.

La syntaxe d'une instruction SQL DELETE est la suivante:

DELETE FROM nom_table [condition WHERE];

Instruction TRUNCATE: Cette commande permet de supprimer toutes les lignes de la table et de libérer l’espace contenant la table.

1
Bhushan Patil

Tronquer et Supprimer en SQL sont deux commandes utilisées pour supprimer ou supprimer des données d'une table. Bien que de nature assez basique, les deux commandes SQL peuvent créer beaucoup de problèmes jusqu'à ce que vous soyez familiarisé avec les détails avant de les utiliser . Un choix incorrect de commande peut entraîner un processus très lent ou même détruire le segment de journal si trop de données doit être supprimé et le segment de journal n’est pas suffisant. C’est pourquoi il est essentiel de savoir quand utiliser les commandes truncate et delete en SQL, mais avant de les utiliser, vous devez connaître les différences entre Truncate et Delete et nous permettre de savoir quand DELETE est la meilleure option pour les supprimer. data ou TRUNCATE doivent être utilisés pour purger les tables.

Voir chèque cliquez ici

0
wpzone4u

Ce n'est pas que tronquer ne consigne rien dans SQL Server. Truncate ne consigne aucune information mais consigne la page de désallocation de données pour la table sur laquelle vous avez déclenché TRUNCATE.

et l'enregistrement tronqué peut être annulé si nous définissons la transaction au début et que nous pouvons récupérer l'enregistrement tronqué après l'avoir annulé. Mais ne peut pas récupérer les enregistrements tronqués à partir de la sauvegarde du journal des transactions après une transaction tronquée validée.

0
user2587360

Une des principales raisons pour laquelle il est pratique est lorsque vous devez actualiser les données dans une table de plusieurs millions de lignes, sans vouloir la reconstruire. "Supprimer *" prendrait une éternité, alors que l’impact de Truncate sur les performances serait négligeable.

0
Jordan Ogren

La commande Truncate est utilisée pour réinitialiser la table. Il s'agit d'une commande DDL qui supprime toutes les lignes de la table. Attendu que DELETE est une commande DML permettant de supprimer une ligne ou un ensemble de lignes selon certaines conditions, si aucune condition n'est spécifiée, cette commande supprimera toutes les lignes de la table. 

0
Rishish

Je voudrais commenter le post de matthieu, mais je n'ai pas encore le représentant ...

En MySQL, le compteur d'incrémentation automatique est réinitialisé avec truncate, mais pas avec delete.

0
nathan

En émettant une instruction TRUNCATE TABLE, vous demandez à SQL Server de supprimer tous les enregistrements d'une table, sans que la journalisation ou le traitement de la transaction ait lieu.

0
Gerald

Une autre différence spécifique au serveur Microsoft SQL réside dans delete, vous pouvez utiliser l'instruction output pour suivre les enregistrements supprimés, par exemple:

delete from [SomeTable]
output deleted.Id, deleted.Name

Vous ne pouvez pas faire cela avec truncate.

0

Supprimer Supprimer supprimer uniquement les données, la structure de la table reste intacte.

Il s'agit d'une reprise d'instruction DML possible. Aucune validation n'est exécutée ni avant ni après. (Parce que c'est une déclaration DML). Ils prennent des verrous sur les lignes, ils génèrent des redo (ils en ont besoin). Ils ont besoin de segments dans le tablespace UNDO. Une suppression n'abandonne pas l'espace du segment et une table dans laquelle tous les enregistrements ont été supprimés conserve tous ses blocs d'origine. Un tronqué ne ramène pas la limite supérieure du tableau à zéro, il conserve sa position initiale. Supprimer supprime les lignes spécifiques filtrées par l'instruction where. et le journal est maintenu pour cela. Il peut activer les déclencheurs. Truncate Truncate ne supprime que les données, la structure de la table reste intacte. Il s'agit d'une restauration d'instruction DDL non possible (sauf dans SQL 2005). Elle émet un COMMIT avant d'agir et un autre COMMIT après afin qu'aucune annulation de la transaction ne soit possible. (Parce que c'est une instruction DDL) Aucun verrou de niveau ligne n'est utilisé. Aucune répétition ou restauration n'est générée. Ils ne nécessitent pas de segments dans l'espace de table UNDO. Toutes les barres, sauf les initiales, sont désaffectées de la table. Un tronçon ramène à zéro la marque maximale de la table. Truncate supprime la page associée à la table afin que tous les index soient réinitialisés. Il n'active pas les déclencheurs. Drop Drop supprime définitivement les données ainsi que la structure de la table. Il s'agit d'une instruction DDL La restauration est impossible Il émet un COMMIT avant d'agir et un autre COMMIT par la suite, de sorte qu'aucune restauration de la transaction n'est possible. (Parce que c'est une instruction DDL) Aucun verrou de niveau ligne n'est utilisé. Aucune répétition ou restauration n'est générée. Ils ne nécessitent pas de segments dans l'espace de table UNDO. Toutes les barres, sauf les initiales, sont désaffectées de la table. Un tronçon ramène à zéro la marque maximale de la table. Truncate supprime la page associée à la table afin que tous les index soient réinitialisés. Il n'active pas les déclencheurs.

0
MANISH PRIYADARSHI

En bref, tronquer n'enregistre rien (donc c'est beaucoup plus rapide mais ne peut pas être annulé) alors que supprimer est enregistré (et peut faire partie d'une transaction plus importante, sera annulé, etc.) Si vous avez des données que vous ne voulez pas dans une table dans dev, il est généralement préférable de les tronquer, car vous ne courez pas le risque de remplir le journal des transactions.

0
Oskar

Ne peut pas faire de DDL sur un dblink.

0
joel garry

Truncate peut aussi être annulé ici

begin Tran
delete from  Employee

select * from Employee
Rollback
select * from Employee
0
Vinay Pandit

L'instruction DELETE peut comporter une clause WHERE permettant de supprimer des enregistrements spécifiques, tandis que l'instruction TRUNCATE n'en nécessite aucun et efface l'intégralité de la table.

0
Ali