Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Mô phỏng một CASCADE XÓA trong MySQL?

Bạn có thể tạo một bản sao của cơ sở dữ liệu và đặt trình kích hoạt trên 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 ;

Bảng nhật ký chỉ là một bảng với các trường sau:

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

Nếu bạn thực hiện SELECT @last_id:= max(id) FROM log trước khi xóa tầng trên bản sao.
Sau đó, bạn có thể thực hiện SELECT * FROM log WHERE id > @last_id
và nhận tất cả các hàng sẽ bị xóa trong tầng.

Sau đó, bạn có thể sử dụng restore_table1 để tạo lại các hàng đã bị xóa trong tầng trong cơ sở dữ liệu sao chép.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhận số lượng hàng phù hợp bằng truy vấn CẬP NHẬT với PHP mysqli

  2. Từ khóa SEPARATOR không hoạt động bình thường trong Hibernate Formula

  3. Truy vấn giới hạn PHP, SQL bằng biến php

  4. Sắp xếp theo ngày &giờ theo thứ tự giảm dần?

  5. Chia bảng sau số hàng X &thêm văn bản trong vòng lặp trong khi (sử dụng TCPDF)