sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur tar man bort data från flera tabeller?

Om du har kontroll över ditt schema skulle jag få schemat att använda cascading raderar .

Från artikeln (den mer relevanta delen översatt för ditt exempel)

CREATE TABLE point
(
    pt_id integer PRIMARY KEY,
    evt_id integer REFERENCES event ON DELETE CASCADE
)

Om du har konfigurerat kaskader kan du bara ta bort från huvudhändelsetabellen och alla andra tabeller kommer att städas upp automatiskt

Annars måste du först radera alla referenser, sedan tar du bort huvudtabellen. Du bör göra detta i en transaktion för att hålla data konsekventa

BEGIN;
DELETE FROM trace WHERE EXISTS 
    (SELECT 1 FROM point WHERE evt_id = 1139 AND trace.pt_id = point.pt_id);
DELETE FROM point where evt_id = 1139;
DELETE FROM magnitude where evt_id = 1139;
DELETE FROM event where evt_id = 1139;
COMMIT;


  1. Öka värdet i MySQL-uppdateringsfrågan

  2. Definiera tabell- och kolumnnamn som argument i en plpgsql-funktion?

  3. Infoga flera rader från ett php-formulär i databasen

  4. Övervakning av Percona XtraDB-kluster - nyckelmått