sql >> Databáze >  >> RDS >> Mysql

Simulovat DELETE CASCADE v MySQL?

Můžete vytvořit kopii databáze a umístit spouštěče do 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 ;

Tabulka protokolu je pouze tabulka s následujícími poli:

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

Pokud provedete SELECT @last_id:= max(id) FROM log před kaskádou mazání na kopii.
Poté můžete provést SELECT * FROM log WHERE id > @last_id
a získejte všechny řádky, které budou v kaskádě smazány.

Poté můžete pomocí restore_table1 znovu vytvořit řádky, které byly odstraněny v kaskádě v databázi kopírování.



  1. Jak mohu používat MySQL ve Visual Studiu 2010 s EF4?

  2. Jak převést výsledky dotazu SQL do html tabulky se specifickým formátem

  3. Zobrazte hodnoty, které jsou v tabulce2, ale NE v tabulce1

  4. Oracle:aktualizace více tabulek => ORA-01779:nelze upravit sloupec, který se mapuje na tabulku bez zachování klíčů