MySQL Ερώτημα DELETE: Πώς να διαγράψετε μια σειρά από τον πίνακα
⚡ Έξυπνη Σύνοψη
MySQL Το ερώτημα DELETE καταργεί γραμμές που δεν χρειάζονται πλέον από έναν πίνακα και επιστρέφει τον αριθμό των γραμμών που επηρεάζονται. Αυτός ο πόρος εξηγεί τη σύνταξη DELETE, το φιλτράρισμα WHERE, τη διαγραφή πολλαπλών γραμμών με IN και τις ασφαλέστερες εναλλακτικές λύσεις TRUNCATE και DROP.

Τι είναι το ερώτημα DELETE;
The MySQL ΔΙΑΓΡΑΦΗ Η εντολή DELETE χρησιμοποιείται για την αφαίρεση γραμμών που δεν απαιτούνται πλέον από έναν πίνακα βάσης δεδομένων. Διαγράφει ολόκληρη τη γραμμή από τον πίνακα και επιστρέφει τον αριθμό των διαγραμμένων γραμμών. Η εντολή DELETE είναι χρήσιμη όταν χρειάζεται να διαγράψετε προσωρινά ή παρωχημένα δεδομένα από τη βάση δεδομένων σας.
Το ερώτημα DELETE στο MySQL μπορεί να αφαιρέσει περισσότερες από μία γραμμές από έναν πίνακα σε μία μόνο εκτέλεση. Αυτό αποδεικνύεται πλεονεκτικό όταν αφαιρείτε μεγάλο αριθμό γραμμών από έναν πίνακα βάσης δεδομένων.
Μόλις διαγραφεί μια γραμμή, δεν είναι δυνατή η ανάκτησή της. Να δημιουργείτε πάντα αντίγραφο ασφαλείας της βάσης δεδομένων πριν διαγράψετε δεδομένα, ώστε η βάση δεδομένων να μπορεί να αποκατασταθεί και να ελεγχθεί αργότερα, εάν χρειαστεί.
Πώς να διαγράψετε μια γραμμή σε MySQL
Με σαφή σκοπό της πρότασης, το επόμενο βήμα είναι η σύνταξη. Για να διαγράψετε μια γραμμή σε MySQL, χρησιμοποιείται η πρόταση DELETE FROM:
DELETE FROM `table_name` [WHERE condition];
ΕΔΩ:
- ΔΙΑΓΡΑΦΗ ΑΠΟ `όνομα_πίνακα` λέει στο MySQL διακομιστή για να αφαιρέσει γραμμές από τον καθορισμένο πίνακα.
- [ΠΟΥ συνθήκη] είναι προαιρετικό και χρησιμοποιείται για την εφαρμογή ενός φίλτρου που περιορίζει τον αριθμό των γραμμών που επηρεάζονται από το ερώτημα DELETE.
Εάν η ΟΤΙ ρήτρα δεν χρησιμοποιείται στο MySQL Ερώτημα DELETE, έπειτα όλοι Οι γραμμές σε έναν δεδομένο πίνακα θα διαγραφούν.
⚠️ Προειδοποίηση: Εκτελέστε πρώτα το φίλτρο ως SELECT. Εάν επιστρέψει ακριβώς τις γραμμές που θέλετε να καταργήσετε, η αντίστοιχη DELETE είναι ασφαλής. Η πλήρης σύνταξη τεκμηριώνεται στο MySQL Εγχειρίδιο Δήλωσης ΔΙΑΓΡΑΦΗΣ.
Παράδειγμα MySQL Διαγραφή ερωτήματος
Η επόμενη ενότητα δημιουργεί ένα μικρό σύνολο δεδομένων και στη συνέχεια διαγράφει από αυτό.
Βήμα 1: Εισαγωγή δεδομένων δείγματος
Πριν προχωρήσουμε σε μια πιο λεπτομερή συζήτηση σχετικά με την πρόταση SQL DELETE, ας εισαγάγουμε μερικά δείγματα δεδομένων στον πίνακα movies για να εργαστούμε.
INSERT INTO `movies` (`title`, `director`, `year_released`, `category_id`) VALUES ('The Great Dictator', 'Charlie Chaplin', 1940, 7); INSERT INTO `movies` (`title`, `director`, `category_id`) VALUES ('sample movie', 'Anonymous', 8); INSERT INTO `movies` (`title`, `director`, `year_released`, `category_id`) VALUES ('movie 3', 'John Brown', 1920, 8);
Η εκτέλεση του παραπάνω σεναρίου προσθέτει τρεις (3) ταινίες στον πίνακα ταινιών. Πριν προχωρήσουμε, ας απαριθμήσουμε όλες τις ταινίες στον πίνακά μας.
SELECT * FROM `movies`;
Η εκτέλεση του παραπάνω σεναρίου μας δίνει τα ακόλουθα αποτελέσματα. Οι τρεις νέες γραμμές που εισήχθησαν επισημαίνονται.
| movie_id | τίτλος | διευθυντής | έτος_κυκλοφόρησε | κατηγορία_αναγνωριστικό |
|---|---|---|---|---|
| 1 | Πειρατές της Καραϊβικής 4 | Ρομπ Μάρσαλ | 2011 | 1 |
| 2 | Ξεχνώντας τη Σάρα Μάρσαλ | Nicholas Stoller | 2008 | 2 |
| 3 | X Men | Τιμή NULL | 2008 | Τιμή NULL |
| 4 | Code Όνομα Μαύρο | Έντγκαρ Τζιμς | 2010 | Τιμή NULL |
| 5 | Μικρά κορίτσια του μπαμπά | Τιμή NULL | 2007 | 8 |
| 6 | Αγγελοι και ΔΑΙΜΟΝΕΣ | Τιμή NULL | 2007 | 6 |
| 7 | Ντα Βίντσι Code | Τιμή NULL | 2007 | 6 |
| 9 | Honey mooners | Τζον Σουλτς | 2005 | 8 |
| 16 | 67% Ένοχοι | Τιμή NULL | 2012 | Τιμή NULL |
| 18 | Ο Μεγάλος Δικτάτορας | Τσάρλι Τσάπλιν | 1940 | 7 |
| 19 | δείγμα ταινίας | ανώνυμος | Τιμή NULL | 8 |
| 20 | ταινία 3 | John Brown | 1920 | 8 |
Βήμα 2: Διαγραφή μίας γραμμής
Ας υποθέσουμε ότι η βιντεοθήκη Myflix δεν επιθυμεί πλέον να ενοικιάσει την ταινία «Ο Μεγάλος Δικτάτορας» και θέλει να αφαιρεθεί από τη βάση δεδομένων. Το αναγνωριστικό ταινίας της είναι 18, επομένως το παρακάτω σενάριο διαγράφει αυτήν τη γραμμή.
DELETE FROM `movies` WHERE `movie_id` = 18;
Εκτέλεση του παραπάνω σεναρίου στο MySQL πάγκος εργασίας κατά της βάσης δεδομένων Myflix διαγράφει την ταινία με αναγνωριστικό 18 από τον πίνακα.
Ας ελέγξουμε τώρα την τρέχουσα κατάσταση του πίνακα ταινιών.
SELECT * FROM `movies`;
| movie_id | τίτλος | διευθυντής | έτος_κυκλοφόρησε | κατηγορία_αναγνωριστικό |
|---|---|---|---|---|
| 1 | Πειρατές της Καραϊβικής 4 | Ρομπ Μάρσαλ | 2011 | 1 |
| 2 | Ξεχνώντας τη Σάρα Μάρσαλ | Nicholas Stoller | 2008 | 2 |
| 3 | X Men | Τιμή NULL | 2008 | Τιμή NULL |
| 4 | Code Όνομα Μαύρο | Έντγκαρ Τζιμς | 2010 | Τιμή NULL |
| 5 | Μικρά κορίτσια του μπαμπά | Τιμή NULL | 2007 | 8 |
| 6 | Αγγελοι και ΔΑΙΜΟΝΕΣ | Τιμή NULL | 2007 | 6 |
| 7 | Ντα Βίντσι Code | Τιμή NULL | 2007 | 6 |
| 9 | Honey mooners | Τζον Σουλτς | 2005 | 8 |
| 16 | 67% Ένοχοι | Τιμή NULL | 2012 | Τιμή NULL |
| 19 | δείγμα ταινίας | ανώνυμος | Τιμή NULL | 8 |
| 20 | ταινία 3 | John Brown | 1920 | 8 |
ΣΗΜΕΊΩΣΗ:
- Η ταινία με αναγνωριστικό 18 δεν επιστρέφεται πλέον στο σύνολο αποτελεσμάτων ερωτήματος.
- Δεν μπορείτε να διαγράψετε μία μόνο στήλη από έναν πίνακα με την εντολή DELETE. Η εντολή καταργεί μια ολόκληρη γραμμή. Για να διαγράψετε ένα πεδίο, χρησιμοποιήστε ένα Ερώτημα ΕΝΗΜΕΡΩΣΗΣ που ορίζει τη στήλη σε NULL.
Βήμα 3: Διαγραφή πολλαπλών γραμμών με IN
Ας υποθέσουμε ότι έχουμε μια λίστα με ταινίες που θέλουμε να διαγράψουμε. Αντί να εκτελούμε μία εντολή ανά γραμμή, μπορούμε να συνδυάσουμε την πρόταση WHERE με τον τελεστή IN.
DELETE FROM `movies` WHERE `movie_id` IN (20,21);
Η εκτέλεση του παραπάνω σεναρίου διαγράφει τις ταινίες με ID 20 και 21 από τον πίνακα ταινιών μας με ένα πέρασμα.
ΔΙΑΓΡΑΦΗ έναντι ΠΕΡΙΚΟΨΗΣ έναντι ΑΠΟΘΕΣΗΣ MySQL
Η ΔΙΑΓΡΑΦΗ δεν είναι ο μόνος τρόπος για να αφαιρέσετε δεδομένα από MySQLΟι αρχάριοι συχνά το επιλέγουν όταν μια πιο γρήγορη εντολή θα ταίριαζε καλύτερα, επομένως ο παρακάτω πίνακας συγκρίνει τις τρεις εντολές αφαίρεσης.
| Χαρακτηριστικό | ΔΙΑΓΡΑΦΗ | ΚΟΥΤΣΟΥΡΕΥΩ | DROP |
|---|---|---|---|
| Τύπος εντολής | DML | DDL | DDL |
| ΟΤΙ ρήτρα | υποστηριζόνται! | Δεν υποστηρίζεται | Δεν υποστηρίζεται |
| Τι αφαιρείται | Επιλεγμένες σειρές | Όλες οι σειρές | Γραμμές και δομή πίνακα |
| Επαναφορά | Πιθανό εντός μιας συναλλαγής | Δεν είναι δυνατό (έμμεση υποβολή) | Δεν είναι δυνατό (έμμεση υποβολή) |
| ΑΥΤΟΜΑΤΗ ΑΥΞΗΣΗ | Ο μετρητής διατηρείται | Ο μετρητής επαναφέρεται στην αρχική τιμή | Ο μετρητής αφαιρείται μαζί με το τραπέζι |
| Ταχύτητα σε μεγάλα τραπέζια | Αργό (σειρά προς σειρά) | Πολύ γρήγορα | Πολύ γρήγορα |
Χρησιμοποιήστε τη ΔΙΑΓΡΑΦΗ όταν χρειάζεστε ένα φίλτρο ή τη δυνατότητα επαναφοράς. Χρησιμοποιήστε ΤΡΑΠΕΖΙ ΔΡΑΣΤΙΚΟΥ όταν θέλετε να αδειάσετε γρήγορα έναν πίνακα και να επαναφέρετε τον μετρητή AUTO_INCREMENT. Χρησιμοποιήστε την συνάρτηση DROP μόνο όταν ο ίδιος ο πίνακας δεν χρειάζεται πλέον, επειδή αφαιρεί τον ορισμό μαζί με τα δεδομένα.
