Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Symulować DELETE CASCADE w MySQL?

Możesz zrobić kopię bazy danych i umieścić wyzwalacze na 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 ;

Tabela dziennika to po prostu tabela z następującymi polami:

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

Jeśli wykonasz SELECT @last_id:= max(id) FROM log przed kaskadą usuwania kopii.
Następnie możesz wykonać SELECT * FROM log WHERE id > @last_id
i uzyskaj wszystkie wiersze, które zostaną usunięte w kaskadzie.

Następnie możesz użyć restore_table1 do odtworzenia wierszy, które zostały usunięte w kaskadzie w kopii bazy danych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pobieranie indeksu wstawionego wiersza

  2. Baza danych parametrów powiązanych PHP wywołuje nieprawidłową liczbę parametrów, jeśli używam dwukropka

  3. Jak uzyskać datę następnego miesiąca od dzisiejszej daty i wstawić ją do mojej bazy danych?

  4. Python MySQLdb - Błąd 1045:Odmowa dostępu dla użytkownika

  5. Pobierz najnowszy wiersz dla podanego identyfikatora