PostgreSQL SLET Rækker fra Vælg

⚡ Smart opsummering

PostgreSQL DELETE fjerner en eller flere rækker fra en tabel, og parring med en WHERE-klausul målretter kun de poster, der matcher en betingelse, mens udeladelse af WHERE rydder alle rækker i tabellen.

  • ???? Syntaks: DELETE FROM table WHERE-betingelsen fjerner matchende rækker, og RETURNING kan gentage de slettede data.
  • 🎯 Én betingelse: En enkelt WHERE-klausul sletter kun de rækker, der opfylder én test.
  • To betingelser: Ved at forbinde to tests med AND indsnævres sletningen til præcise rækker.
  • 🔗 EXISTS-klausul: EXISTS sletter rækker i én tabel baseret på matchende poster i en anden tabel.
  • 🖥️ pgAdmin: De samme sletteforespørgsler køres visuelt gennem pgAdmin-forespørgselseditoren.
  • 🤖 AI-sikkerhed: AI-assistenter tilføjer den korrekte WHERE-klausul og advarer, før hele tabellen slettes.

PostgreSQL Slet rækker fra markering

Slet forespørgsel i PostgreSQL

DELETE-sætning in PostgreSQL bruges til at slette en eller flere poster fra en tabel. For kun at slette valgte rækker fra en tabel, PostgreSQL giver dig mulighed for at kombinere DELETE-sætningen med WHERE-klausulen; ellers sletter den alle poster i tabellen.

PostgreSQL Slet forespørgselssyntaks

DELETE-sætningen kan defineres ved hjælp af syntaksen nedenfor:

[ 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] [, ...] ]

Driftsparametre

Følgende parametre er tilgængelige:

  • med-forespørgsel: WITH-klausulen giver dig mulighed for at referere til en eller flere underforespørgsler efter navn i DELETE-forespørgslen.
  • tabelnavn: navnet på den tabel, hvorfra poster skal slettes.
  • aliasen erstatning for navnet på måltabellen.
  • bruger-listeTabeludtryk, der tillader brug af kolonner fra andre tabeller i WHERE-klausulen.
  • tilstand(er): valgfrit. Disse er de betingelser, der skal være opfyldt for at poster kan slettes. Hvis dette afsnit ikke angives, slettes alle poster med tabelnavn.
  • markørnavn: markøren, der skal bruges i WHERE CURRENT OF-betingelsen. Den sidste række, der blev hentet af denne markør, vil blive slettet.
  • output-udtryk: det udtryk, der skal behandles og returneres af DELETE-sætningen, efter hver række er slettet.
  • output-navn: det navn, der skal bruges til den returnerede kolonne.

Bemærk, at da DELETE-sætningen sletter hele rækken, behøver du ikke at angive kolonnenavnene.

PostgreSQL Slet forespørgsel med én betingelse

DELETE-sætningen kan bruges med en enkelt betingelse, som er angivet ved hjælp af WHERE-klausulen. Betragt Price-tabellen med følgende data:

Pris:

PostgreSQL Slet forespørgsel med én betingelse

Lad os slette posten med et id på 4:

DELETE FROM Price
WHERE id = 4;

Ovenstående kommando sletter de poster, hvor id'et er 4. Lad os bekræfte, om sletningen var vellykket:

PostgreSQL Slet forespørgsel med én betingelse

Rækken med et id på 4 er blevet slettet.

Slet forespørgsel med to betingelser

PostgreSQL DELETE-sætningen kan også tage to betingelser. De to betingelser skal forbindes ved hjælp af AND-operatoren. Vi bruger følgende tabel:

Pris:

PostgreSQL Slet forespørgsel med to betingelser

Overvej eksemplet nedenfor:

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

I ovenstående kommando sletter vi den række, hvor id'et er 3, og prisen er 300. Vi kan nu forespørge tabellen:

SELECT * FROM Price;

Dette returnerer følgende:

PostgreSQL Slet forespørgsel med to betingelser

Posten med et id på 3 og en pris på 300 blev slettet.

PostgreSQL Slet forespørgsel ved hjælp af EXISTS-betingelsen

Med EXISTS betingelse, kan du gøre DELETE mere kompleks. Nogle gange kan der være behov for at slette poster i én tabel baseret på poster i en anden tabel.

Da FROM-klausulen ikke tillader dig at liste poster fra mere end én tabel, når du udfører en sletning, bliver EXISTS-klausulen meget nyttig. Vi har følgende to tabeller:

Bestil:

PostgreSQL Slet forespørgsel ved hjælp af EXISTS-betingelsen

Pris:

PostgreSQL Slet forespørgsel ved hjælp af EXISTS-betingelsen

Vi kan derefter køre følgende forespørgsel:

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

Kommandoen sletter rækker fra bogtabellen, der har et matchende id i pristabellen med en pris under 250.

Bogtabellen er nu som følger:

PostgreSQL Slet forespørgsel ved hjælp af EXISTS-betingelsen

Posten med et id på 1 blev slettet.

Sådan sletter du en række i PostgreSQL ved hjælp af pgAdmin

De samme sletteforespørgsler kan også køres visuelt via pgAdmin-grænsefladen ved at følge nedenstående trin:

Med én betingelse

Trin 1) Log ind på din pgAdmin-konto. Åbn pgAdmin, og log ind på din konto med dine loginoplysninger.

Trin 2) Opret en demodatabase.

  1. Klik på Databaser i navigationslinjen til venstre.
  2. Klik på Demo.

Slet række ind PostgreSQL ved hjælp af pgAdmin

Trin 3) Indtast nedenstående forespørgsel i forespørgselseditoren:

DELETE FROM Price
WHERE id = 4;

Trin 4) Klik på knappen Udfør.

Slet række ind PostgreSQL ved hjælp af pgAdmin

Trin 5) Lad os tjekke om rækken blev slettet:

Slet række ind PostgreSQL ved hjælp af pgAdmin

Med to betingelser

Trin 1) Log ind på din pgAdmin-konto.

Trin 2)

  1. Klik på Databaser i navigationslinjen til venstre.
  2. Klik på Demo.

Slet række ind PostgreSQL ved hjælp af pgAdmin

Trin 3) Indtast forespørgslen i forespørgselseditoren:

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

Trin 4) Klik på knappen Udfør.

Slet række ind PostgreSQL ved hjælp af pgAdmin

Trin 5) Lad os kontrollere, om sletningen lykkedes:

Slet række ind PostgreSQL ved hjælp af pgAdmin

Bruger EXISTS Condition

Trin 1) Log ind på din pgAdmin-konto.

Trin 2)

  1. Klik på Databaser i navigationslinjen til venstre.
  2. Klik på Demo.

Slet række ved hjælp af EXISTS-betingelsen i pgAdmin

Trin 3) Indtast forespørgslen i forespørgselseditoren:

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

Trin 4) Klik på knappen Udfør.

Slet række ved hjælp af EXISTS-betingelsen i pgAdmin

Trin 5) Lad os kontrollere, om sletningen lykkedes:

Slet række ved hjælp af EXISTS-betingelsen i pgAdmin

Download databasen brugt i denne vejledning

Ofte Stillede Spørgsmål

TRUNCATE fjerner alle rækker øjeblikkeligt og nulstiller lagerplads, men ignorerer WHERE og rækkevise triggere. DELETE fjerner valgte rækker ved hjælp af en WHERE-klausul, udløser rækketriggere og kan rulles tilbage i en transaktion.

Tilføj en USING-klausul: DELETE FROM member USING denylist WHERE member.phone = denylist.phone. Den forbinder den anden tabel og sletter matchende rækker, hvilket giver det samme resultat som EXISTS med en tydeligere syntaks i join-stil.

RETURNING gentager kolonner fra de rækker, der lige er slettet i den samme sætning. Skriv DELETE FROM Price WHERE id = 4 RETURNING *, og PostgreSQL returnerer de fjernede data, så applikationer kan logge eller bekræfte ændringen.

Ja. Indpak DELETE i en transaktion med BEGIN, og kør derefter ROLLBACK for at fortryde den eller COMMIT for at beholde den. Indtil du committer, kan de fjernede rækker gendannes, hvilket beskytter mod fejlagtige sletninger.

Behold én kopi pr. gruppe ved hjælp af den skjulte ctid-kolonne: DELETE FROM Price a USING Price b WHERE a.ctid < b.ctid AND a.id = b.id. Dette fjerner dubletter af rækker, mens en enkelt post bevares.

Kør først det samme filter som en SELECT, eller åbn en transaktion med BEGIN og brug RETURNING til at inspicere de berørte rækker. RevVisning af WHERE-resultatet før COMMIT forhindrer sletning af flere rækker end beregnet.

AI-assistenter oversætter regler på almindeligt engelsk til en DELETE med den korrekte WHERE-klausul, foreslår EXISTS eller USING til sletning på tværs af tabeller og markerer udsagn, der mangler en betingelse, som ville rydde hele tabellen.

Ja. En AI Copilot gennemgår hver DELETE, advarer, når der ikke er en WHERE-klausul til stede, og anbefaler en transaktion eller en RETURNING-forhåndsvisning, hvilket reducerer risikoen for utilsigtet sletning af hele tabellen.

Opsummer dette indlæg med: