mysql - 在 MySQL 中模拟 DELETE CASCADE?

标签 mysql cascading-deletes

是否可以自动预测 DELETE CASCADE 之后的操作?在我的软件中,我想向用户发出警告,其中包含有关随后将被删除的数据的详细信息。

最佳答案

您可以复制数据库并将触发器放在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 在副本数据库中重新创建在级联中删除的行。

关于mysql - 在 MySQL 中模拟 DELETE CASCADE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6029304/

相关文章:

mysql - 删除级联时外键约束无效

java - 如何创建一个存储过程,由客户端应用程序在具有给定参数的表中搜索记录并返回找到的行数据?

MySQL COUNT、GROUP BY 和 ORDER BY

php - 将数组样式数据保存到mysql数据库(JSON)

Grails (GORM) 多对一级联删除行为

c# - NHibernate:级联删除的 c# 操作

php - 我的 PHP/SQL 查询有什么问题(不会从 SQL 读取)(登录系统)

php - 从 MySQL 中连续选择随机用户

sql - 使用 INNER JOIN 删除错误 PostgreSQL

MySQL 多删除。是否可以多次删除引用的行?