Maison >base de données >SQL >Quelle est la différence entre les lignes de supprimer SQL et tronquer
La différence de base entre DELETE
et TRUNCATE
réside dans leur approche pour supprimer les données d'un tableau. DELETE
est une instruction Language de manipulation de données (DML) qui supprime les lignes une par une , sur la base d'une clause WHERE
spécifiée (ou toutes les lignes si aucune clause WHERE
n'est fournie). Cela signifie qu'il traite chaque ligne individuellement, en enregistrant chaque suppression. TRUNCATE
, en revanche, est une instruction de définition de données (DDL) qui supprime toutes les lignes d'une table à la fois . Il s'agit d'une opération en vrac plus rapide qui ne enregistre pas les suppressions de lignes individuelles. Considérez DELETE
comme en supprimant chirurgicalement des lignes spécifiques, tandis que TRUNCATE
, c'est comme essuyer la table avec un seul coup. Surtout, DELETE
permet l'élimination conditionnelle, tandis que TRUNCATE
supprime toujours toutes les lignes.
TRUNCATE
Ossuffle considérablement DELETE
en termes de vitesse, en particulier sur les grandes tables. En effet, TRUNCATE
n'a pas besoin de enregistrer individuellement chaque suppression. Le gain de performances est particulièrement visible dans les scénarios où vous devez supprimer un grand nombre de lignes ou toutes les lignes d'une table. Le traitement Row-by-Row de DELETE
, associé à sa surcharge de journalisation, peut conduire à des goulots d'étranglement considérables. En outre, le journal des transactions pour une opération DELETE
sera nettement supérieur à celui de TRUNCATE
, ce qui a un impact sur les temps de validation des transactions et potentiellement la consommation d'espace disque. Considérez un scénario où vous supprimez des millions de lignes; TRUNCATE
finirait par une fraction du temps DELETE
prendrait.
DELETE
Les instructions fonctionnent dans les transactions. Cela signifie que si une opération DELETE
est effectuée dans une transaction et que la transaction est annulée (ROLLBACK
), les lignes supprimées seront restaurées à leur état d'origine. Le journal des transactions garde une trace des suppressions individuelles, permettant leur inversion. Inversement, les instructions TRUNCATE
sont généralement pas une partie des transactions (bien que les systèmes de base de données puissent offrir des extensions qui le permettent). Une opération TRUNCATE
est généralement engagée immédiatement et un ROLLBACK
après un TRUNCATE
ne restaurera pas les données supprimées. Les données sont considérées comme irrévocablement supprimées une fois l'opération TRUNCATE
terminée. En effet, TRUNCATE
est une opération DDL qui ne maintient pas un journal détaillé des déménagements individuels au même niveau de granularité que les opérations DML.
La récupération de données après une opération DELETE
est souvent possible, surtout si l'opération s'est produite dans une transaction qui n'a pas encore été engagée. Si la transaction est toujours active, A ROLLBACK
restaurera les lignes supprimées. Même si la transaction s'est engagée, les sauvegardes de base de données (complètes, incrémentielles ou différentielles) peuvent être utilisées pour récupérer les données. Les journaux de transaction peuvent également être utilisés pour récupérer les lignes individuelles, en fonction du système de base de données et de la stratégie de journalisation.
La récupération de données après une opération TRUNCATE
est beaucoup plus difficile. Parce que TRUNCATE
est une instruction DDL, elle ne génère généralement pas des entrées de journal de transaction détaillées pour les lignes individuelles. Par conséquent, A ROLLBACK
ne récupérera pas les données. Votre meilleur pari pour la récupération après un TRUNCATE
est de s'appuyer sur les sauvegardes de la base de données. Si vous avez une sauvegarde récente, vous pouvez restaurer la table à partir de cette sauvegarde. La récupération d'un journal de transaction seule n'est généralement pas possible après un TRUNCATE
. La probabilité de récupération réussie est directement proportionnelle à la récence et à la fréquence de vos sauvegardes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!