δεν πρέπει να σταματήσουμε εδώ, υπάρχουν πολλές άλλες διαφορές μεταξύ του DELETE και του TRUNCATE. Ας τις συζητήσουμε με τη βοήθεια του πίνακα σύγκρισης που φαίνεται παρακάτω.
Συγκριτικό διάγραμμα
Βάση σύγκρισης | ΔΙΑΓΡΑΦΩ | ΚΟΛΟΒΟΣ |
---|---|---|
Βασικός | Μπορείτε να ορίσετε την πλειάδα που θέλετε να διαγράψετε. | Διαγράφει όλες τις πλειάδες από μια σχέση. |
Γλώσσα | Το DELETE είναι μια εντολή Language Manipulation Language. | Το TRUNCATE είναι μια εντολή Γλώσσα ορισμού δεδομένων. |
ΟΠΟΥ | Η εντολή DELETE μπορεί να έχει ρήτρα WHERE. | Η εντολή TRUNCATE δεν έχει ρήτρα WHERE. |
Δώσει το έναυσμα για | Η εντολή DELETE ενεργοποιεί την σκανδάλη που εφαρμόζεται στο τραπέζι και προκαλεί πυρκαγιά. | Η εντολή TRUNCATE δεν ενεργοποιεί τους πυροδότες για πυροδότηση. |
Διαγραφή | Η εντολή DELETE εξαλείφει τις πλειάδες μία-μία. | TRUNCATE διαγράψτε ολόκληρη τη σελίδα δεδομένων που περιέχει τις πλειάδες. |
Κλειδαριά | Η εντολή DELETE κλειδώνει τη γραμμή / πλειάδα πριν τη διαγράψει. | Η εντολή TRUNCATE κλειδώνει τη σελίδα δεδομένων πριν από τη διαγραφή δεδομένων πίνακα. |
Ταχύτητα | Η εντολή DELETE λειτουργεί πιο αργά σε σύγκριση με το TRUNCATE. | Το TRUNCATE είναι ταχύτερο σε σύγκριση με το DELETE. |
Συναλλαγή | Το DELETE καταγράφει το αρχείο καταγραφής συναλλαγών για κάθε διαγραμμένη πλειάδα. | TRUNCATE αρχείο καταγραφής συναλλαγών για κάθε σελίδα διαγραμμένων δεδομένων. |
Επαναφέρω | Η εντολή DELETE μπορεί να ακολουθηθεί είτε από COMMIT είτε από ROLLBACK. | Η εντολή TRUNCATE δεν μπορεί να είναι ROLLBACK. |
Ορισμός του DELETE
Το DELETE είναι μια εντολή γλώσσας χειρισμού δεδομένων (DML). Το έργο της εντολής DELETE είναι να διαγράψετε ή να αφαιρέσετε τις πλειάδες από έναν πίνακα ή μια σχέση. Χρησιμοποιώντας το DELETE, μπορούμε να εξαλείψουμε ολόκληρη την πλειάδα, με όλες τις τιμές χαρακτηριστικών της από μια σχέση. Το DELETE δεν αφαιρεί την τιμή ενός συγκεκριμένου χαρακτηριστικού, μιας πλειάδας από τη σχέση.
Μπορείτε να φιλτράρετε τις πλειάδες που θέλετε να διαγράψετε από έναν πίνακα, χρησιμοποιώντας τη ρήτρα WHERE . Εάν καθορίσετε την παράμετρο WHERE στη δήλωση DELETE, τότε θα διαγράψει μόνο τις πλειάδες που ικανοποιούν την προϋπόθεση WHERE clause. Αλλά αν δεν καθορίσετε την ρήτρα WHERE στη δήλωση DELETE τότε από προεπιλογή διαγράφει ή εξαλείφει όλες τις πλειάδες από μια σχέση. WHERE η ρήτρα στην παράθεση DELETE μπορεί να περιέχει ένθετες εντολές SELECT-FROM-WHERE .
Η σύνταξη της εντολής DELETE έχει ως εξής:
ΔΙΑΓΡΑΦΗ από table_name WHERE [ conditon ];
Η εντολή DELETE λειτουργεί μόνο σε μία μόνο σχέση ή τραπέζι κάθε φορά. Σε περίπτωση που θέλετε να διαγράψετε την πλειάδα από διαφορετικές σχέσεις, πρέπει να τοποθετήσετε διαφορετική εντολή DELETE για κάθε μία από αυτές. Αλλά η διαγραφή της πλειάδας από μια σχέση μπορεί να παραβιάζει την ακεραιότητα αναφοράς της βάσης δεδομένων, η οποία μπορεί να επιλυθεί με τη βοήθεια ενεργοποιητών. Εάν η εντολή DELETE παραβιάζει την ακεραιότητα αναφοράς, τότε ενεργοποιούνται όλες οι αναφορές ενεργοποίησης (εφόσον καθορίζονται) που διαδίδουν τη δράση διαγραφής στις πλειάδες διαφορετικής σχέσης που αναφέρεται στις διαγραμμένες πλειάδες.
Η εντολή DELETE κλειδώνει πρώτα τη γραμμή ή την πλειάδα που θέλετε να διαγράψετε και, στη συνέχεια, διαγράψτε την πλειάδα ένα προς ένα . Ως εκ τούτου, απαιτεί περισσότερες κλειδαριές και πόρους που καθιστούν πιο αργή . Μπορείτε να κάνετε τις αλλαγές που έγιναν με τη δήλωση DELETE μόνιμη χρησιμοποιώντας COMMIT ή μπορείτε να επαναφέρετε τη βάση δεδομένων χρησιμοποιώντας το ROLLBACK .
Ορισμός του TRUNCATE
Το TRUNCATE είναι παρόμοιο με την εντολή DELETE καθώς διαγράφει επίσης πλειάδες από μια σχέση. Η διαφορά είναι ότι διαγράφει ολόκληρες πλειάδες από μια σχέση. Καθώς εκτελείται η εντολή TRUNCATE, διαγράφονται ολόκληρα δεδομένα από τον πίνακα, κάθε πλειάδα μαζί με όλες τις τιμές ιδιοτήτων που αφαιρούνται από τον πίνακα. Αλλά η δομή του πίνακα εξακολουθεί να υπάρχει στη βάση δεδομένων. Έτσι, μπορείτε να εισάγετε πάλι τις πλειάδες στο τραπέζι. Το TRUNCATE είναι μια εντολή Γλώσσα ορισμού δεδομένων.
Η σύνταξη της εντολής TRUNCATE έχει ως εξής:
ΠΙΝΑΚΑΣ ΤΡΟΦΙΜΩΝ table_name ;
Όπως το DELETE, το TRUNCATE δεν λειτουργεί σε δεδομένα πίνακα ανά σειρά. Αντίθετα, λειτουργεί στις σελίδες δεδομένων που αποθηκεύουν τα δεδομένα πίνακα. Τώρα, όταν TRUNCATE διαγράψετε τις σελίδες δεδομένων πρέπει να αποκτήσει το κλείδωμα στις σελίδες δεδομένων αντί των πλειάδων. Ως εκ τούτου, έχει ως αποτέλεσμα λιγότερη απαίτηση για κλειδώματα και πόρους που κάνει το TRUNCATE πιο γρήγορο σε σύγκριση με το DELETE.
Η εκτέλεση της εντολής TRUNCATE δεν ενεργοποιεί τυχόν ενεργοποιητές, αφού δεν λειτουργεί σειρά δεδομένων με σειρά. Το TRUNCATE δεν μπορεί να εκτελεστεί σε περίπτωση που ο πίνακας αναφέρεται από οποιοδήποτε ξένο κλειδί . Μόλις η εντολή TRUNCATE διαγράψει τα δεδομένα του πίνακα, δεν μπορεί ποτέ να ανακτηθεί .
Διαφορές κλειδιών μεταξύ DELETE και TRUNCATE σε SQL
- Η κύρια διαφορά μεταξύ DELETE και TRUNCATE είναι ότι χρησιμοποιώντας το DELETE μπορείτε να διαγράψετε συγκεκριμένη πλειάδα από μια σχέση. Αλλά η χρήση του TRUNCATE θα διαγράψει ολόκληρες πλειάδες από μια σχέση.
- Το DELETE είναι εντολή DML, ενώ το TRUNCATE είναι εντολή DDL.
- Το DELETE χρησιμοποιεί την παράμετρο WHERE για να φιλτράρει τις εγγραφές / πλειάδες που πρόκειται να διαγραφούν. Ωστόσο, το TRUNCATE δεν απαιτεί ρήτρα WHERE καθώς διαγράφει όλες τις πλειάδες, οπότε δεν χρειάζεται να φιλτράρετε τις πλειάδες.
- Το DELETE ενεργοποιεί τους συντελεστές αναφοράς που εφαρμόζονται στους πίνακες. Αλλά το TRUNCATE δεν πυροδοτεί τυχόν σκανδάλες στο τραπέζι.
- Η εντολή DELETE εξαλείφει τις πλειάδες ένα προς ένα από τον πίνακα, με τη σειρά που επεξεργάζονται. Ωστόσο, το TRUNCATE δεν λειτουργεί σε πλειάδες ένα-ένα. Αντίθετα, το TRUNCATE λειτουργεί στη σελίδα δεδομένων που αποθηκεύει δεδομένα πίνακα.
- DELETE αποκτήστε την κλειδαριά στην πλειάδα πριν την διαγράψετε, ενώ το TRUNCATE αποκτά το κλείδωμα στη σελίδα δεδομένων πριν διαγράψει τη σελίδα δεδομένων.
- Το TRUNCATE είναι ταχύτερο σε σύγκριση με την εντολή DELETE.
- ΔΙΑΓΡΑΦΗ του αρχείου καταγραφής συναλλαγών για κάθε πλειάδα ενώ το αρχείο καταγραφής συναλλαγών TRUNCATE για κάθε σελίδα δεδομένων.
- Αφού διαγράψετε τα δεδομένα χρησιμοποιώντας το TRUNCATE, δεν μπορεί ποτέ να ανακτηθεί, ενώ μπορείτε να ανακτήσετε τα δεδομένα σας που έχετε διαγράψει χρησιμοποιώντας την εντολή DELETE.
Συμπέρασμα:
Εάν θέλετε να προσαρμόσετε τη διαγραφή των εγγραφών από τον πίνακα τότε μπορείτε να χρησιμοποιήσετε την εντολή DELETE. Αν θέλετε να αδειάσετε τον πίνακα, δηλαδή δεν θέλετε να αφήσετε δεδομένα σε έναν πίνακα, χρησιμοποιήστε την εντολή TRUNCATE.