Maison > base de données > SQL > Quelle est la différence entre les lignes de supprimer SQL et tronquer

Quelle est la différence entre les lignes de supprimer SQL et tronquer

Robert Michael Kim
Libérer: 2025-03-04 17:49:44
original
971 Les gens l'ont consulté

SQL Supprimer les lignes et la table tronquée: quelle est la différence?

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.

Quelles sont les implications de performance de l'utilisation de Supprimer par rapport à TRUNCATE?

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.

Comment le retour et les transactions se comportent-ils différemment avec des instructions supprimées et tronquées?

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.

Puis-je récupérer des données après avoir utilisé la suppression et le tronçon, et si oui, comment?

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal