sql >> Database teknologi >  >> RDS >> Mysql

Simulere en DELETE CASCADE i MySQL?

Du kan lave en kopi af databasen og sætte triggere på after delete

DELIMITER $$

CREATE TRIGGER ad_table1_each AFTER DELETE ON table1 FOR EACH ROW
BEGIN
  INSERT INTO log VALUES (null                 /*autoinc id*/
        , 'table1'                             /*tablename*/
        , old.id                               /*tableid*/
        , concat_ws(',',old.field1,old.field2  /*CSV's of fields*/
        , NOW()                                /*timestamp*/
        , 'delete');                           /*what action*/


  REPLACE INTO restore_table1 VALUES (old.id,
        , old.field1
        , old.field2
        , ... );

END $$

DELIMITER ;

Logtabellen er kun en tabel med følgende felter:

id            integer autoincrement primary key
tablename     varchar(45)
table_id      integer
fields        varchar(6000)
delete_time   timestamp
action        enum('insert','update','delete')

Hvis du laver en SELECT @last_id:= max(id) FROM log før slettekaskaden på kopien.
Så kan du lave en SELECT * FROM log WHERE id > @last_id
og få alle de rækker, der vil blive slettet i kaskaden.

Derefter kan du bruge restore_table1 til at genskabe de rækker, der blev slettet i kaskaden i kopidatabasen.



  1. Jeg kan ikke oprette forbindelse til Postgres DB med Strapi på Heroku

  2. Automatiser Database Schema Object Check

  3. syntaks for enkelt række MERGE / upsert i SQL Server

  4. Indsættelse af en underordnet node i en XMLTYPE-kolonne