PostgreSQL TA BORT rader från markering

⚡ Smart sammanfattning

PostgreSQL DELETE tar bort en eller flera rader från en tabell, och om den paras ihop med en WHERE-klausul riktas endast in sig på de poster som matchar ett villkor, medan utelämnande av WHERE rensar alla rader i tabellen.

  • 📋 Syntax: DELETE FROM table WHERE-villkoret tar bort matchande rader, och RETURNING kan upprepa den borttagna informationen.
  • 🎯 Ett villkor: En enda WHERE-klausul tar bara bort de rader som uppfyller ett test.
  • Två villkor: Att koppla ihop två tester med AND begränsar borttagningen till exakta rader.
  • 🔗 EXISTS-klausul: EXISTS tar bort rader i en tabell baserat på matchande poster i en annan tabell.
  • 🖥️ pgAdmin: Samma borttagningsfrågor körs visuellt genom pgAdmin-frågeredigeraren.
  • 🤖 AI-säkerhet: AI-assistenter lägger till rätt WHERE-klausul och varnar innan fullständiga tabeller tas bort.

PostgreSQL Ta bort rader från markering

Ta bort fråga in PostgreSQL

Ocuco-landskapet DELETE-sats in PostgreSQL används för att ta bort en eller flera poster från en tabell. För att ta bort endast valda rader från en tabell, PostgreSQL låter dig kombinera DELETE-satsen med WHERE-klausulen; annars raderas alla poster i tabellen.

PostgreSQL Ta bort frågesyntax

DELETE-satsen kan definieras med hjälp av syntaxen nedan:

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

Driftparametrar

Följande parametrar är tillgängliga:

  • med-förfrågan: WITH-klausulen låter dig referera till en eller flera delfrågor med namn inuti DELETE-frågan.
  • tabell-namn: namnet på tabellen från vilken poster ska raderas.
  • alias: en ersättning för namnet på måltabellen.
  • using-listtabelluttryck som tillåter att kolumner från andra tabeller används i WHERE-klausulen.
  • tillstånd/tillståndValfritt. Dessa är villkoren som måste vara uppfyllda för att poster ska kunna tas bort. Om detta avsnitt inte anges kommer alla poster med tabellnamn att tas bort.
  • markörnamn: markören som ska användas i WHERE CURRENT OF-villkoret. Den sista raden som hämtades av denna markör kommer att raderas.
  • output-uttryck: uttrycket som ska bearbetas och returneras av DELETE-satsen efter att varje rad har tagits bort.
  • output-namn: namnet som ska användas för den returnerade kolumnen.

Observera att eftersom DELETE-satsen tar bort hela raden behöver du inte ange kolumnnamnen.

PostgreSQL Ta bort fråga med ett villkor

DELETE-satsen kan användas med ett enda villkor, vilket anges med WHERE-satsen. Betrakta pristabellen med följande data:

Pris:

PostgreSQL Ta bort fråga med ett villkor

Låt oss ta bort posten med id 4:

DELETE FROM Price
WHERE id = 4;

Ovanstående kommando raderar posterna där id:t är 4. Låt oss bekräfta om raderingen lyckades:

PostgreSQL Ta bort fråga med ett villkor

Raden med id 4 har tagits bort.

Ta bort fråga med två villkor

Ocuco-landskapet PostgreSQL DELETE-satsen kan också ta två villkor. De två villkoren ska kopplas samman med hjälp av AND-operatorn. Vi kommer att använda följande tabell:

Pris:

PostgreSQL Ta bort fråga med två villkor

Tänk på exemplet nedan:

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

I kommandot ovan tar vi bort raden där id:t är 3 och priset är 300. Vi kan nu fråga tabellen:

SELECT * FROM Price;

Detta returnerar följande:

PostgreSQL Ta bort fråga med två villkor

Posten med id 3 och pris 300 raderades.

PostgreSQL Ta bort fråga med EXISTS-villkoret

Med EXISTS villkor kan du göra DELETE mer komplex. Ibland kan det finnas ett behov av att ta bort poster i en tabell baserat på poster i en annan tabell.

Eftersom FROM-klausulen inte tillåter dig att lista poster från mer än en tabell när du utför en borttagning, blir EXISTS-klausulen mycket användbar. Vi har följande två tabeller:

Bok:

PostgreSQL Ta bort fråga med EXISTS-villkoret

Pris:

PostgreSQL Ta bort fråga med EXISTS-villkoret

Vi kan sedan köra följande fråga:

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

Kommandot tar bort rader från boktabellen som har ett matchande ID i pristabellen med ett pris under 250.

Boktabellen ser nu ut som följer:

PostgreSQL Ta bort fråga med EXISTS-villkoret

Posten med id 1 raderades.

Hur man tar bort en rad i PostgreSQL med pgAdmin

Samma borttagningsfrågor kan också köras visuellt via pgAdmin-gränssnittet, enligt stegen nedan:

Med ett villkor

Steg 1) Logga in på ditt pgAdmin-konto. Öppna pgAdmin och logga in på ditt konto med dina inloggningsuppgifter.

Steg 2) Skapa en demodatabas.

  1. Klicka på Databaser i navigeringsfältet till vänster.
  2. Klicka på Demo.

Ta bort rad in PostgreSQL med pgAdmin

Steg 3) Skriv in frågan nedan i frågeredigeraren:

DELETE FROM Price
WHERE id = 4;

Steg 4) Klicka på knappen Kör.

Ta bort rad in PostgreSQL med pgAdmin

Steg 5) Låt oss kontrollera om raden har raderats:

Ta bort rad in PostgreSQL med pgAdmin

Med två villkor

Steg 1) Logga in på ditt pgAdmin-konto.

Steg 2)

  1. Klicka på Databaser i navigeringsfältet till vänster.
  2. Klicka på Demo.

Ta bort rad in PostgreSQL med pgAdmin

Steg 3) Skriv in frågan i frågeredigeraren:

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

Steg 4) Klicka på knappen Kör.

Ta bort rad in PostgreSQL med pgAdmin

Steg 5) Låt oss kontrollera om raderingen lyckades:

Ta bort rad in PostgreSQL med pgAdmin

Använder EXISTS Condition

Steg 1) Logga in på ditt pgAdmin-konto.

Steg 2)

  1. Klicka på Databaser i navigeringsfältet till vänster.
  2. Klicka på Demo.

Ta bort rad med EXISTS-villkoret i pgAdmin

Steg 3) Skriv in frågan i frågeredigeraren:

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

Steg 4) Klicka på knappen Kör.

Ta bort rad med EXISTS-villkoret i pgAdmin

Steg 5) Låt oss kontrollera om raderingen lyckades:

Ta bort rad med EXISTS-villkoret i pgAdmin

Ladda ner den databas som används i denna handledning

Vanliga frågor

TRUNCATE tar bort varje rad direkt och återställer lagring, men ignorerar WHERE och radvisa utlösare. DELETE tar bort valda rader med en WHERE-klausul, utlöser radutlösare och kan rullas tillbaka inuti en transaktion.

Lägg till en USING-klausul: DELETE FROM member USING denylist WHERE member.phone = denylist.phone. Den kopplar till den andra tabellen och tar bort matchande rader, vilket ger samma resultat som EXISTS med tydligare kopplingssyntax.

RETURNING ekar kolumner från raderna som just raderades i samma sats. Skriv DELETE FROM Price WHERE id = 4 RETURNING *, och PostgreSQL returnerar den borttagna informationen så att program kan logga eller bekräfta ändringen.

Ja. Slå in DELETE i en transaktion med BEGIN och kör sedan ROLLBACK för att ångra den eller COMMIT för att behålla den. Tills du har commit kan de borttagna raderna återställas, vilket skyddar mot felaktiga borttagningar.

Behåll en kopia per grupp med den dolda ctid-kolumnen: DELETE FROM Price a USING Price b WHERE a.ctid < b.ctid AND a.id = b.id. Detta tar bort dubbletter av rader samtidigt som en enda post behålls.

Kör samma filter som en SELECT först, eller öppna en transaktion med BEGIN och använd RETURNING för att inspektera de berörda raderna. RevAtt visa WHERE-resultatet före COMMIT förhindrar att fler rader tas bort än avsett.

AI-assistenter översätter regler på vanligt språk till en DELETE med rätt WHERE-klausul, föreslår EXISTS eller USING för borttagningar mellan tabeller och flaggar satser som saknar ett villkor som skulle rensa hela tabellen.

Ja. En AI-copilot granskar varje DELETE, varnar när ingen WHERE-klausul finns och rekommenderar en transaktion eller en RETURNING-förhandsgranskning, vilket minskar risken för oavsiktlig borttagning av hela tabellen.

Sammanfatta detta inlägg med: