PostgreSQL ΔΙΑΓΡΑΦΗ γραμμών από την επιλογή

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

PostgreSQL Η συνάρτηση DELETE καταργεί μία ή περισσότερες γραμμές από έναν πίνακα και η αντιστοίχισή της με μια ρήτρα WHERE στοχεύει μόνο τις εγγραφές που ταιριάζουν με μια συνθήκη, ενώ η παράλειψη της συνάρτησης WHERE διαγράφει κάθε γραμμή στον πίνακα.

  • 📋 Σύνταξη: Η συνθήκη DELETE FROM table WHERE καταργεί τις αντίστοιχες γραμμές και η συνθήκη RETURNING μπορεί να επαναλάβει τα διαγραμμένα δεδομένα.
  • 🎯 Μία προϋπόθεση: Μία μόνο ρήτρα WHERE διαγράφει μόνο τις γραμμές που ικανοποιούν μία δοκιμή.
  • Δύο προϋποθέσεις: Η ένωση δύο δοκιμών με AND περιορίζει τη διαγραφή σε ακριβείς γραμμές.
  • 🔗 ΥΠΑΡΧΕΙ Ρήτρα: Η συνάρτηση EXISTS διαγράφει γραμμές σε έναν πίνακα με βάση αντίστοιχες εγγραφές σε έναν άλλο πίνακα.
  • pgΔιαχειριστής: Τα ίδια ερωτήματα διαγραφής εκτελούνται οπτικά μέσω του προγράμματος επεξεργασίας ερωτημάτων pgAdmin.
  • 🤖 Ασφάλεια Τεχνητής Νοημοσύνης: Οι βοηθοί τεχνητής νοημοσύνης προσθέτουν τη σωστή ρήτρα WHERE και προειδοποιούν πριν από τη διαγραφή ολόκληρου του πίνακα.

PostgreSQL Διαγραφή γραμμών από την επιλογή

Διαγραφή ερωτήματος σε PostgreSQL

The Δήλωση DELETE in PostgreSQL χρησιμοποιείται για τη διαγραφή μίας ή περισσότερων εγγραφών από έναν πίνακα. Για να διαγράψετε μόνο επιλεγμένες γραμμές από έναν πίνακα, PostgreSQL σας επιτρέπει να συνδυάσετε την πρόταση DELETE με τον όρο WHERE. Διαφορετικά, διαγράφει όλες τις εγγραφές στον πίνακα.

PostgreSQL Διαγραφή σύνταξης ερωτήματος

Η εντολή DELETE μπορεί να οριστεί χρησιμοποιώντας την παρακάτω σύνταξη:

[ WITH [ RECURSIVE ] with-query [, ...] ]
DELETE FROM [ ONLY ] table-name [ * ] [ [ AS ] alias ]
    [ USING using-list ]
    [ WHERE condition(s) | WHERE CURRENT OF cursor-name]
    [ RETURNING * | output-expression [ [ AS ] output-name] [, ...] ]

Παράμετροι

Οι ακόλουθες παράμετροι είναι διαθέσιμες:

  • με-ερώτημα: η ρήτρα WITH σάς επιτρέπει να αναφέρετε ένα ή περισσότερα υποερωτήματα ονομαστικά μέσα στο ερώτημα DELETE.
  • τραπέζι-όνομα: το όνομα του πίνακα από τον οποίο θα διαγραφούν οι εγγραφές.
  • ψευδώνυμο: ένα υποκατάστατο του ονόματος του πίνακα προορισμού.
  • χρησιμοποιώντας-λίστα: παραστάσεις πίνακα που επιτρέπουν τη χρήση στηλών από άλλους πίνακες στον όρο WHERE.
  • συνθήκες): προαιρετικό. Αυτές είναι οι προϋποθέσεις που πρέπει να πληρούνται για τη διαγραφή εγγραφών. Εάν δεν παρέχεται αυτή η ενότητα, όλες οι εγγραφές ονόματος πίνακα θα διαγραφούν.
  • δρομέας-όνομα: ο δρομέας που θα χρησιμοποιηθεί στη συνθήκη WHERE CURRENT OF. Η τελευταία γραμμή που ανακτήθηκε από αυτόν τον δρομέα θα διαγραφεί.
  • έξοδο-έκφραση: η έκφραση που θα υποβληθεί σε επεξεργασία και θα επιστραφεί από την εντολή DELETE μετά τη διαγραφή κάθε γραμμής.
  • έξοδος-όνομα: το όνομα που θα χρησιμοποιηθεί για την επιστρεφόμενη στήλη.

Σημειώστε ότι επειδή η εντολή DELETE διαγράφει ολόκληρη τη γραμμή, δεν χρειάζεται να καθορίσετε τα ονόματα των στηλών.

PostgreSQL Διαγραφή ερωτήματος με μία προϋπόθεση

Η πρόταση DELETE μπορεί να χρησιμοποιηθεί με μία μόνο συνθήκη, η οποία ορίζεται χρησιμοποιώντας την ρήτρα WHERE. Θεωρήστε τον πίνακα Price με τα ακόλουθα δεδομένα:

Τιμή:

PostgreSQL Διαγραφή ερωτήματος με μία προϋπόθεση

Ας διαγράψουμε την εγγραφή με αναγνωριστικό 4:

DELETE FROM Price
WHERE id = 4;

Η παραπάνω εντολή διαγράφει τις εγγραφές στις οποίες το id είναι 4. Ας επιβεβαιώσουμε εάν η διαγραφή ήταν επιτυχής:

PostgreSQL Διαγραφή ερωτήματος με μία προϋπόθεση

Η σειρά με αναγνωριστικό 4 έχει διαγραφεί.

Διαγραφή ερωτήματος με δύο προϋποθέσεις

The PostgreSQL Η εντολή DELETE μπορεί επίσης να λάβει δύο συνθήκες. Οι δύο συνθήκες πρέπει να συνδεθούν χρησιμοποιώντας τον τελεστή AND. Θα χρησιμοποιήσουμε τον ακόλουθο πίνακα:

Τιμή:

PostgreSQL Διαγραφή ερωτήματος με δύο προϋποθέσεις

Εξετάστε το παράδειγμα που δίνεται παρακάτω:

DELETE FROM Price
WHERE id = 3
AND price = 300;

Στην παραπάνω εντολή, διαγράφουμε τη γραμμή στην οποία το id είναι 3 και η τιμή είναι 300. Τώρα μπορούμε να υποβάλουμε ερώτημα στον πίνακα:

SELECT * FROM Price;

Αυτό επιστρέφει τα ακόλουθα:

PostgreSQL Διαγραφή ερωτήματος με δύο προϋποθέσεις

Ο δίσκος με αναγνωριστικό 3 και τιμή 300 διαγράφηκε.

PostgreSQL Διαγραφή ερωτήματος χρησιμοποιώντας τη συνθήκη EXISTS

Με την ΥΠΑΡΧΕΙ Συνθήκη, μπορείτε να κάνετε τη ΔΙΑΓΡΑΦΗ πιο περίπλοκη. Μερικές φορές μπορεί να χρειαστεί να διαγράψετε εγγραφές σε έναν πίνακα με βάση εγγραφές σε έναν άλλο πίνακα.

Επειδή η ρήτρα FROM δεν σας επιτρέπει να παραθέσετε εγγραφές από περισσότερους από έναν πίνακες κατά την εκτέλεση μιας διαγραφής, η ρήτρα EXISTS γίνεται πολύ χρήσιμη. Έχουμε τους ακόλουθους δύο πίνακες:

Βιβλίο:

PostgreSQL Διαγραφή ερωτήματος χρησιμοποιώντας τη συνθήκη EXISTS

Τιμή:

PostgreSQL Διαγραφή ερωτήματος χρησιμοποιώντας τη συνθήκη EXISTS

Στη συνέχεια, μπορούμε να εκτελέσουμε το ακόλουθο ερώτημα:

DELETE FROM Book
WHERE EXISTS
  (SELECT 1
    FROM Price
    WHERE Price.id = Book.id
    AND price < 250 );

Η εντολή διαγράφει γραμμές από τον πίνακα Βιβλίο που έχουν αντίστοιχο αναγνωριστικό στον πίνακα Τιμή με τιμή κάτω από 250.

Ο πίνακας του βιβλίου έχει πλέον ως εξής:

PostgreSQL Διαγραφή ερωτήματος χρησιμοποιώντας τη συνθήκη EXISTS

Η εγγραφή με αναγνωριστικό 1 διαγράφηκε.

Πώς να διαγράψετε μια γραμμή στο PostgreSQL χρησιμοποιώντας το pgAdmin

Τα ίδια ερωτήματα διαγραφής μπορούν επίσης να εκτελεστούν οπτικά μέσω της διεπαφής pgAdmin, ακολουθώντας τα παρακάτω βήματα:

Με έναν όρο

Βήμα 1) Συνδεθείτε στον λογαριασμό σας pgAdmin. Ανοίξτε το pgAdmin και συνδεθείτε στον λογαριασμό σας χρησιμοποιώντας τα διαπιστευτήριά σας.

Βήμα 2) Δημιουργήστε μια βάση δεδομένων επίδειξης.

  1. Από τη γραμμή πλοήγησης στα αριστερά, κάντε κλικ στην επιλογή Βάσεις δεδομένων.
  2. Κάντε κλικ στο Demo.

Διαγραφή σειράς μέσα PostgreSQL χρησιμοποιώντας το pgAdmin

Βήμα 3) Πληκτρολογήστε το παρακάτω ερώτημα στο πρόγραμμα επεξεργασίας ερωτημάτων:

DELETE FROM Price
WHERE id = 4;

Βήμα 4) Κάντε κλικ στο κουμπί Εκτέλεση.

Διαγραφή σειράς μέσα PostgreSQL χρησιμοποιώντας το pgAdmin

Βήμα 5) Ας ελέγξουμε αν η γραμμή διαγράφηκε:

Διαγραφή σειράς μέσα PostgreSQL χρησιμοποιώντας το pgAdmin

Με δύο προϋποθέσεις

Βήμα 1) Συνδεθείτε στον λογαριασμό σας pgAdmin.

Βήμα 2)

  1. Από τη γραμμή πλοήγησης στα αριστερά, κάντε κλικ στην επιλογή Βάσεις δεδομένων.
  2. Κάντε κλικ στο Demo.

Διαγραφή σειράς μέσα PostgreSQL χρησιμοποιώντας το pgAdmin

Βήμα 3) Πληκτρολογήστε το ερώτημα στο πρόγραμμα επεξεργασίας ερωτημάτων:

DELETE FROM Price
WHERE id = 3
AND price = 300;

Βήμα 4) Κάντε κλικ στο κουμπί Εκτέλεση.

Διαγραφή σειράς μέσα PostgreSQL χρησιμοποιώντας το pgAdmin

Βήμα 5) Ας ελέγξουμε αν η διαγραφή ήταν επιτυχής:

Διαγραφή σειράς μέσα PostgreSQL χρησιμοποιώντας το pgAdmin

Χρήση της συνθήκης EXISTS

Βήμα 1) Συνδεθείτε στον λογαριασμό σας pgAdmin.

Βήμα 2)

  1. Από τη γραμμή πλοήγησης στα αριστερά, κάντε κλικ στην επιλογή Βάσεις δεδομένων.
  2. Κάντε κλικ στο Demo.

Διαγραφή γραμμής χρησιμοποιώντας τη συνθήκη EXISTS στο pgAdmin

Βήμα 3) Πληκτρολογήστε το ερώτημα στο πρόγραμμα επεξεργασίας ερωτημάτων:

DELETE FROM Book
WHERE EXISTS
  (SELECT 1
    FROM Price
    WHERE Price.id = Book.id
    AND price < 250 );

Βήμα 4) Κάντε κλικ στο κουμπί Εκτέλεση.

Διαγραφή γραμμής χρησιμοποιώντας τη συνθήκη EXISTS στο pgAdmin

Βήμα 5) Ας ελέγξουμε αν η διαγραφή ήταν επιτυχής:

Διαγραφή γραμμής χρησιμοποιώντας τη συνθήκη EXISTS στο pgAdmin

Κάντε λήψη της βάσης δεδομένων που χρησιμοποιείται σε αυτό το σεμινάριο

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

Η συνάρτηση TRUNCATE καταργεί αμέσως κάθε γραμμή και επαναφέρει τον χώρο αποθήκευσης, αλλά αγνοεί τα εναύσματα WHERE και ανά γραμμή. Η συνάρτηση DELETE καταργεί τις επιλεγμένες γραμμές χρησιμοποιώντας μια ρήτρα WHERE, ενεργοποιεί τα εναύσματα γραμμών και μπορεί να αναιρεθεί μέσα σε μια συναλλαγή.

Προσθέστε μια ρήτρα USING: DELETE FROM member USING denylist WHERE member.phone = denylist.phone. Ενώνει τον δεύτερο πίνακα και διαγράφει τις αντίστοιχες γραμμές, δίνοντας το ίδιο αποτέλεσμα με την EXISTS με σαφέστερη σύνταξη στυλ σύνδεσης.

Η ΕΠΙΣΤΡΟΦΗ επαναλαμβάνει στήλες από τις γραμμές που μόλις διαγράφηκαν στην ίδια πρόταση. Γράψτε DELETE FROM Price WHERE id = 4 RETURNING *, και PostgreSQL Επιστρέφει τα δεδομένα που έχουν αφαιρεθεί, ώστε οι εφαρμογές να μπορούν να καταγράψουν ή να επιβεβαιώσουν την αλλαγή.

Ναι. Τυλίξτε τη ΔΙΑΓΡΑΦΗ σε μια συναλλαγή με BEGIN και, στη συνέχεια, εκτελέστε ROLLBACK για να την αναιρέσετε ή COMMIT για να τη διατηρήσετε. Μέχρι να την υποβάλετε, οι αφαιρεμένες γραμμές μπορούν να αποκατασταθούν, κάτι που σας προστατεύει από λανθασμένες διαγραφές.

Κρατήστε ένα αντίγραφο ανά ομάδα χρησιμοποιώντας την κρυφή στήλη ctid: DELETE FROM Price a USING Price b WHERE a.ctid < b.ctid ΚΑΙ a.id = b.id. Αυτό καταργεί τις διπλότυπες γραμμές διατηρώντας παράλληλα μία μόνο εγγραφή.

Εκτελέστε πρώτα το ίδιο φίλτρο με ένα SELECT ή ανοίξτε μια συναλλαγή με BEGIN και χρησιμοποιήστε την RETURNING για να ελέγξετε τις γραμμές που επηρεάζονται. RevΗ προβολή του αποτελέσματος WHERE πριν από την εντολή COMMIT αποτρέπει τη διαγραφή περισσότερων γραμμών από τις προβλεπόμενες.

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

Ναι. Ένας Συγπιλότος Τεχνητής Νοημοσύνης εξετάζει κάθε ΔΙΑΓΡΑΦΗ, προειδοποιεί όταν δεν υπάρχει ρήτρα WHERE και συνιστά μια συναλλαγή ή μια προεπισκόπηση RETURNING, μειώνοντας τον κίνδυνο τυχαίας διαγραφής ολόκληρου του πίνακα.

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