Записи удаляются из определенной таблицы, каждый раз оставляя одинаковое количество записей (54). - PullRequest
1 голос
/ 28 марта 2019

Хорошо, я только что унаследовал проект от предыдущего разработчика, до того, как я пришел, у них были проблемы с тем, что конкретная таблица теряла записи и оставляла ровно одинаковое количество записей каждый раз, когда записи полностью стирались.И я заметил, что в коде также много операторов DELETE, но я не могу найти скрипт, который удаляет записи.

Пока я запускаю задание CRON два раза в день для резервного копированиябаза данных.Я проверил CASCADE DELETE, используя этот SQL

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 Ответ

1 голос
/ 15 апреля 2019

Я столкнулся с подобной ситуацией.Я создал оператор 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...