PostgreSQL POISTA rivit Valitusta

⚡ Älykäs yhteenveto

PostgreSQL DELETE poistaa yhden tai useamman rivin taulukosta, ja sen yhdistäminen WHERE-lausekkeeseen kohdistuu vain ehtoa vastaaviin tietueisiin, kun taas WHERE-lauseen pois jättäminen tyhjentää kaikki taulukon rivit.

  • 📋 Syntaksi: DELETE FROM table WHERE -ehto poistaa vastaavat rivit, ja RETURNING voi toistaa poistetut tiedot.
  • 🎯 Yksi ehto: Yksi WHERE-lauseke poistaa vain ne rivit, jotka täyttävät yhden testin.
  • ➕ Kaksi ehtoa: Kahden testin yhdistäminen JA-operaattorilla rajaa poiston tiettyihin riveihin.
  • 🔗 EXISTS-lauseke: EXISTS poistaa yhden taulukon rivejä toisen taulukon vastaavien tietueiden perusteella.
  • 🖥️ pgAdmin: Samat poistokyselyt suoritetaan visuaalisesti pgAdmin-kyselyeditorissa.
  • 🤖 Tekoälyn turvallisuus: Tekoälyavustajat lisäävät oikean WHERE-lauseen ja varoittavat ennen koko taulukon poistoa.

PostgreSQL Poista rivit valinnasta

Poista kysely sisään PostgreSQL

DELETE-lauseke in PostgreSQL käytetään yhden tai useamman tietueen poistamiseen taulukosta. Jos haluat poistaa vain valitut rivit taulukosta, PostgreSQL mahdollistaa DELETE-lauseen yhdistämisen WHERE-lausekkeeseen; muuten se poistaa kaikki taulukon tietueet.

PostgreSQL Poista kyselyn syntaksi

DELETE-lauseke voidaan määritellä alla olevan syntaksin avulla:

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

parametrit

Seuraavat parametrit ovat käytettävissä:

  • kyselyn kanssaWITH-lausekkeen avulla voit viitata yhteen tai useampaan alikyselyyn nimellä DELETE-kyselyn sisällä.
  • taulukon nimi: sen taulukon nimi, josta tietueet poistetaan.
  • alias: kohdetaulukon nimen korvike.
  • using-list: taulukkolausekkeet, jotka sallivat muiden taulukoiden sarakkeiden käytön WHERE-lausekkeessa.
  • ehto(t): valinnainen. Nämä ehdot on täytettävä, jotta tietueet voidaan poistaa. Jos tätä osiota ei täytetä, kaikki taulukon nimitietueet poistetaan.
  • kohdistimen nimi: WHERE CURRENT OF -ehdossa käytettävä kohdistin. Tämän kohdistimen viimeinen noutama rivi poistetaan.
  • lähtö-ilmaisu: lauseke, jonka DELETE-lauseke käsittelee ja palauttaa jokaisen rivin poistamisen jälkeen.
  • lähtönimi: palautetussa sarakkeessa käytettävä nimi.

Huomaa, että koska DELETE-lauseke poistaa koko rivin, sarakenimiä ei tarvitse määrittää.

PostgreSQL Poista kysely yhdellä ehdolla

DELETE-lauseketta voidaan käyttää yhden ehdon kanssa, joka asetetaan WHERE-lausekkeella. Tarkastellaan Price-taulukkoa seuraavilla tiedoilla:

Hinta:

PostgreSQL Poista kysely yhdellä ehdolla

Poistetaan tietue, jonka tunnus on 4:

DELETE FROM Price
WHERE id = 4;

Yllä oleva komento poistaa tietueet, joiden id on 4. Vahvistetaan, onnistuiko poisto:

PostgreSQL Poista kysely yhdellä ehdolla

Rivi, jonka tunnus on 4, on poistettu.

Poista kysely kahdella ehdolla

PostgreSQL DELETE-lauseke voi myös ottaa kaksi ehtoa. Ehto tulee yhdistää AND-operaattorilla. Käytämme seuraavaa taulukkoa:

Hinta:

PostgreSQL Poista kysely kahdella ehdolla

Harkitse alla olevaa esimerkkiä:

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

Yllä olevassa komennossa poistamme rivin, jonka tunnus on 3 ja hinta on 300. Voimme nyt tehdä kyselyn taulukosta:

SELECT * FROM Price;

Tämä palauttaa seuraavan:

PostgreSQL Poista kysely kahdella ehdolla

Tietue, jonka tunnus oli 3 ja hinta 300, poistettiin.

PostgreSQL Poista kysely käyttämällä EXISTS-ehtoa

Kanssa EXISTS ehdon, voit tehdä POISTAMISESTA monimutkaisemman. Joskus voi olla tarpeen poistaa tietueita yhdestä taulukosta toisen taulukon tietueiden perusteella.

Koska FROM-lauseke ei salli useamman kuin yhden taulukon tietueiden listaamista poistoa suoritettaessa, EXISTS-lauseke on erittäin hyödyllinen. Meillä on seuraavat kaksi taulukkoa:

Kirja:

PostgreSQL Poista kysely käyttämällä EXISTS-ehtoa

Hinta:

PostgreSQL Poista kysely käyttämällä EXISTS-ehtoa

Voimme sitten suorittaa seuraavan kyselyn:

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

Komento poistaa Book-taulukosta rivit, joilla on vastaava tunnus Price-taulukossa, jonka hinta on alle 250.

Kirjataulukko on nyt seuraavanlainen:

PostgreSQL Poista kysely käyttämällä EXISTS-ehtoa

Tietue, jonka tunnus on 1, poistettiin.

Rivin poistaminen PostgreSQL pgAdminin avulla

Samat poistokyselyt voidaan suorittaa myös visuaalisesti pgAdmin-käyttöliittymän kautta noudattamalla seuraavia ohjeita:

Yhdellä ehdolla

Vaihe 1) Kirjaudu pgAdmin-tilillesi. Avaa pgAdmin ja kirjaudu tilillesi tunnuksillasi.

Vaihe 2) Luo demotietokanta.

  1. Napsauta vasemmalla olevasta navigointipalkista Tietokannat.
  2. Napsauta Demo.

Poista rivi sisään PostgreSQL pgAdminin avulla

Vaihe 3) Kirjoita alla oleva kysely kyselyeditoriin:

DELETE FROM Price
WHERE id = 4;

Vaihe 4) Napsauta Suorita-painiketta.

Poista rivi sisään PostgreSQL pgAdminin avulla

Vaihe 5) Tarkistetaan, onko rivi poistettu:

Poista rivi sisään PostgreSQL pgAdminin avulla

Kahdella ehdolla

Vaihe 1) Kirjaudu sisään pgAdmin-tilillesi.

Vaihe 2)

  1. Napsauta vasemmalla olevasta navigointipalkista Tietokannat.
  2. Napsauta Demo.

Poista rivi sisään PostgreSQL pgAdminin avulla

Vaihe 3) Kirjoita kysely kyselyeditoriin:

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

Vaihe 4) Napsauta Suorita-painiketta.

Poista rivi sisään PostgreSQL pgAdminin avulla

Vaihe 5) Tarkistamme, onnistuiko poistaminen:

Poista rivi sisään PostgreSQL pgAdminin avulla

Käytetään EXISTS-ehtoa

Vaihe 1) Kirjaudu sisään pgAdmin-tilillesi.

Vaihe 2)

  1. Napsauta vasemmalla olevasta navigointipalkista Tietokannat.
  2. Napsauta Demo.

Rivin poistaminen käyttämällä EXISTS-ehtoa pgAdminissa

Vaihe 3) Kirjoita kysely kyselyeditoriin:

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

Vaihe 4) Napsauta Suorita-painiketta.

Rivin poistaminen käyttämällä EXISTS-ehtoa pgAdminissa

Vaihe 5) Tarkistamme, onnistuiko poistaminen:

Rivin poistaminen käyttämällä EXISTS-ehtoa pgAdminissa

Lataa tässä opetusohjelmassa käytetty tietokanta

UKK

TRUNCATE poistaa kaikki rivit välittömästi ja nollaa tallennustilan, mutta jättää huomiotta WHERE-lausekkeen ja rivikohtaiset triggerit. DELETE poistaa valitut rivit WHERE-lauseen avulla, laukaisee rivitriggerit ja se voidaan peruuttaa transaktion sisällä.

Lisää USING-lauseke: DELETE FROM member USING denylist WHERE member.phone = denylist.phone. Se liittyy toiseen taulukkoon ja poistaa vastaavat rivit, antaen saman tuloksen kuin EXISTS, mutta selkeämmän liitostyylisen syntaksin kera.

RETURNING toistaa juuri poistettujen rivien sarakkeet samassa lausekkeessa. Kirjoita DELETE FROM Price WHERE id = 4 RETURNING *, ja PostgreSQL palauttaa poistetut tiedot, jotta sovellukset voivat kirjata tai vahvistaa muutoksen.

Kyllä. Sisällytä DELETE-komento tapahtumaan BEGIN-komennolla ja kumoa se ROLLBACK-komennolla tai säilytä se COMMIT-komennolla. Poistetut rivit voidaan palauttaa, kunnes commit-komento tehdään, mikä suojaa virheellisiltä poistoilta.

Säilytä yksi kopio ryhmää kohden käyttämällä piilotettua ctid-saraketta: DELETE FROM Price a USING Price b WHERE a.ctid < b.ctid AND a.id = b.id. Tämä poistaa päällekkäiset rivit säilyttäen kuitenkin yhden tietueen.

Suorita sama suodatin ensin SELECT-funktiolla tai avaa tapahtuma BEGIN-funktiolla ja käytä RETURNING-funktiota tarkistaaksesi kyseiset rivit. RevWHERE-tuloksen tarkasteleminen ennen COMMIT-lausetta estää useampien rivien poistamisen kuin on tarkoitettu.

Tekoälyavustajat kääntävät selkokieliset säännöt DELETE-lausekkeeksi, jossa on oikea WHERE-lauseke, ehdottavat EXISTS- tai USING-lausetta taulukoiden välisiin poistoihin ja merkitsevät lausekkeet, joista puuttuu ehto, joka tyhjentäisi koko taulukon.

Kyllä. Tekoälyinen apupilotti tarkistaa jokaisen DELETE-komennon, varoittaa, jos WHERE-lauseketta ei ole, ja suosittelee tapahtumaa tai RETURNING-esikatselua, mikä vähentää koko taulukon vahingossa tapahtuvan poistamisen riskiä.

Tiivistä tämä viesti seuraavasti: