Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Simulasikan DELETE CASCADE di MySQL?

Anda dapat membuat salinan database dan menempatkan pemicu pada 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 ;

Tabel log hanyalah tabel dengan bidang berikut:

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

Jika Anda melakukan SELECT @last_id:= max(id) FROM log sebelum menghapus kaskade pada salinan.
Kemudian Anda dapat melakukan SELECT * FROM log WHERE id > @last_id
dan dapatkan semua baris yang akan dihapus dalam kaskade.

Setelah itu Anda dapat menggunakan restore_table1 untuk membuat ulang baris yang telah dihapus dalam kaskade di database salinan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Fungsi MySQL RADIANS() – Mengkonversi Dari Derajat ke Radian

  2. Tidak dapat memasukkan data ke dalam database menggunakan opsi (textarea)

  3. Rel 3 Masalah Mysql

  4. Mengapa kunci asing tidak dibuat dengan GORM?

  5. Apakah ada yang mirip dengan Wamp Server?