从特定表中删除记录,每次留下的记录量完全相同(54)

时间:2019-03-28 11:11:27

标签: mysql sql

好吧,我刚刚从以前的开发人员那里继承了一个项目,在我进入他们之前,有一个特定的表丢失了记录,每次都保留完全相同数量的记录的问题,记录被完全擦除了。而且我注意到代码中也有很多DELETE语句,但是我找不到删除记录的脚本。

现在,我每天运行两次CRON作业来备份数据库。 我已经使用此SQL

检查了CASCADE DELETE
USE information_schema;

SELECT 
    table_name
FROM
    referential_constraints
WHERE
    constraint_schema = 'my_database_name'
AND referenced_table_name IN 
   (SELECT table_name 
    FROM information_schema.tables 
    WHERE table_schema ='my_database_name')
 AND delete_rule = 'CASCADE'

它列出了我数据库中的所有表,并检查了CASCADE DELETE的任何可能性,但是到目前为止,它返回的是空的。 我经常使用SQL是因为我是后端开发人员,但我不是专家。因此,我真的可以使用一些帮助,因为每次发生时,它都会变得很尴尬。这是一个MySQL数据库。谢谢。

1 个答案:

答案 0 :(得分:1)

我曾经遇到过类似的情况。我创建了一个SQL TRIGGER语句,该语句在删除行之前将行存储到另一个表中,这样:

  1. 我每次都能恢复丢失的数据。
  2. 我能够研究要删除的行,这些信息有助于解决问题。

以下是在删除记录之前备份记录的示例:

CREATE TABLE `history_table` LIKE `table`;

ALTER TABLE `history_table`
MODIFY COLUMN `id` INT UNSIGNED NOT NULL;

ALTER TABLE `history_table` DROP PRIMARY KEY;

DELIMITER $$

CREATE TRIGGER `deleted_table` BEFORE DELETE on `table`
FOR EACH ROW
BEGIN
    INSERT INTO history_table
    SELECT *
    FROM table
    WHERE id = OLD.id;
END$$

DELIMITER ;

用于还原表

INSERT INTO table
    SELECT * FROM history_table