Mysql
 sql >> база данни >  >> RDS >> Mysql

Симулиране на DELETE CASCADE в MySQL?

Можете да направите копие на базата данни и да поставите тригери на 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 ;

Дневната таблица е просто таблица със следните полета:

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

Ако направите SELECT @last_id:= max(id) FROM log преди каскадата за изтриване на копието.
След това можете да направите SELECT * FROM log WHERE id > @last_id
и вземете всички редове, които ще бъдат изтрити в каскадата.

След това можете да използвате restore_table1, за да създадете отново редовете, които са били изтрити в каскадата в базата данни за копиране.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql заявка ПОКАЗВАНЕ НА КОЛОНИ ОТ таблица като 'colmunname':questions

  2. Мигриране на MySQL база данни от Amazon RDS към DigitalOcean

  3. СУМ от суми със знак за долар

  4. База данни:Най-добрият начин за ефективност за запитване на данни за географско местоположение?

  5. com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException Вмъкване на грешка в mysql