sql >> Database >  >> RDS >> Sqlserver

Hoe rijen in tabellen te verwijderen die refererende sleutels naar andere tabellen bevatten

Verwijder eerst, als een eenmalige oefening voor het opschonen van gegevens, de verweesde rijen, b.v.

DELETE 
  FROM ReferencingTable 
 WHERE NOT EXISTS (
                   SELECT * 
                     FROM MainTable AS T1
                    WHERE T1.pk_col_1 = ReferencingTable.pk_col_1
                  );

Ten tweede, als een eenmalige oefening voor het wijzigen van het schema, voeg de ON DELETE CASCADE toe referentiële actie naar de refererende sleutel in de referentietabel, b.v.

ALTER TABLE ReferencingTable DROP 
   CONSTRAINT fk__ReferencingTable__MainTable;

ALTER TABLE ReferencingTable ADD 
   CONSTRAINT fk__ReferencingTable__MainTable 
      FOREIGN KEY (pk_col_1)
      REFERENCES MainTable (pk_col_1)
      ON DELETE CASCADE;

Dan worden rijen in de referentietabellen voor altijd automatisch verwijderd wanneer de rij waarnaar wordt verwezen wordt verwijderd.



  1. Kraaienpootnotatie

  2. Vergelijk MySQL met CSV en vind verschillen

  3. Hoe mysql-gegevens in bulk bijwerken met één query?

  4. PL/SQL:verschil tussen twee datums