MySQL Ερώτημα DELETE: Πώς να διαγράψετε μια σειρά από τον πίνακα

⚡ Έξυπνη Σύνοψη

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

  • 🗑️ Βασική Δήλωση: Η συνθήκη DELETE FROM `table_name` [WHERE condition] διαγράφει ολόκληρες γραμμές και επιστρέφει τον αριθμό των γραμμών που διαγράφηκαν.
  • ⚠️ Παραλείπεται ΟΠΟΥ: Η παράλειψη της ρήτρας WHERE διαγράφει κάθε γραμμή στον πίνακα, επομένως να φιλτράρετε πάντα πριν από την εκτέλεση.
  • 🎯 TargetΑφαίρεση ed: Η συνάρτηση WHERE `movie_id` = 18 αφαιρεί μία εγγραφή, ενώ η συνάρτηση WHERE `movie_id` IN (20,21) αφαιρεί αρκετές σε μία μόνο εντολή.
  • 🔁 Μη αναστρέψιμη δράση: Τα διαγραμμένα δεδομένα δεν μπορούν να ανακτηθούν χωρίς αντίγραφο ασφαλείας, επομένως δημιουργήστε αντίγραφο ασφαλείας της βάσης δεδομένων πριν εκτελέσετε τη λειτουργία DELETE.
  • 📊 Πεδίο εφαρμογής σε επίπεδο γραμμής: Η ΔΙΑΓΡΑΦΗ καταργεί μόνο ολόκληρες γραμμές. Η διαγραφή μιας τιμής μίας στήλης απαιτεί ΕΝΗΜΕΡΩΣΗ με NULL.
  • ΔΙΑΓΡΑΦΗ έναντι ΠΕΡΙΚΟΠΗΣ έναντι ΑΠΟΘΕΣΗΣ: Η εντολή DELETE φιλτράρει τις γραμμές, η εντολή 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 μόνο όταν ο ίδιος ο πίνακας δεν χρειάζεται πλέον, επειδή αφαιρεί τον ορισμό μαζί με τα δεδομένα.

Συχνές Ερωτήσεις

Μόνο μέσα σε μια ανοιχτή συναλλαγή. Εκτελέστε την εντολή START TRANSACTION, εκτελέστε την εντολή DELETE και, στη συνέχεια, κάντε ROLLBACK για να την αναιρέσετε. Μετά την COMMIT ή με ενεργοποιημένη την αυτόματη καταχώρηση, οι γραμμές εξαφανίζονται και μόνο ένα αντίγραφο ασφαλείας μπορεί να τις επαναφέρει.

Χρησιμοποιήστε μια DELETE πολλαπλών πινάκων με ένα Ενώνω, ονομάζοντας και τους δύο πίνακες πριν από τη λέξη-κλειδί FROM. Εναλλακτικά, ορίστε το ξένο κλειδί με ON DELETE CASCADE, ώστε οι θυγατρικές γραμμές να καταργούνται αυτόματα όταν διαγράφεται η γονική γραμμή.

Η λειτουργία ασφαλούς ενημέρωσης είναι ενεργοποιημένη από προεπιλογή στο MySQL Πάγκος εργασίαςΑπορρίπτει οποιαδήποτε DELETE της οποίας η ρήτρα WHERE δεν χρησιμοποιεί στήλη-κλειδί, αποτρέποντας τυχαίες διαγραφές ολόκληρου του πίνακα. Απενεργοποιήστε την στην ενότητα Επεξεργασία > Προτιμήσεις > Επεξεργαστής SQL.

Ναι. Οι βοηθοί τεχνητής νοημοσύνης μεταφράζουν ένα αίτημα σε απλή αγγλική γλώσσα σε σύνταξη DELETE και μπορούν να εξηγήσουν τον όρο WHERE. Πάντα να ελέγχετε πρώτα το δημιουργημένο φίλτρο σε σχέση με μια συνάρτηση SELECT, επειδή ένα μοντέλο τεχνητής νοημοσύνης δεν μπορεί να δει τα δεδομένα σας σε πραγματικό χρόνο.

Όχι. Αφήστε την Τεχνητή Νοημοσύνη να συντάξει τη δήλωση, αλλά εκτελέστε την πρώτα εσείς οι ίδιοι σε ένα αντίγραφο ασφαλείας ή σε ένα αντίγραφο σταδιακής επεξεργασίας. Μια ρήτρα WHERE που λείπει διαγράφει κάθε γραμμή και κανένα εργαλείο Τεχνητής Νοημοσύνης δεν μπορεί να το αντιστρέψει αυτό μόλις ολοκληρωθεί η συναλλαγή.

Συνοψίστε αυτήν την ανάρτηση με: