Определите целевые поля записи, чтобы они могли быть скопированы и потенциально восстановлены - PullRequest
1 голос
/ 09 декабря 2011

По сути, я пытаюсь создать интерфейс, который будет сообщать администратору: «Эй, мы выполнили этот запрос, и мы не были так уверены в этом, поэтому, если он что-то сломал, нажмите здесь, чтобы отменить его».

Самый простой способ сделать это - как-то выяснить, в какие таблицы и ячейки записан идентифицированный «рискованный» запрос, и сохранить эти данные вместе с некоторыми бухгалтерскими данными в таблице «резервных копий», чтобы при необходимости поля могут быть заполнены их исходным содержимым.

Как мне выяснить, какие поля перезаписываются определенной (возможно сложной) командой mysql?

Редактировать: «рискованно» с точки зрения успешного завершения, но с нежелательными действиями, а не с точки зрения выдачи ошибки или сбоя, а также оставления системы в несовместимом состоянии.

1 Ответ

0 голосов
/ 04 июня 2012

Я предлагаю следующие вещи:
- добавьте триггер AFTER UPDATE для каждой таблицы, которую вы хотите отслеживать
- создайте копию каждой таблицы (пример: [yourtable] _backup), которую вы хотите отслеживать
- во всех триггерах AFTER UPDATE добавьте код: INSERT INTO yourtable_backup VALUES (OLD.field1, OLD.field2 ..., OLD.fieldN)

Как это работает: триггер AFTER UPDATE обнаруживает обновление таблицыи выполняет резервное копирование старых значений в таблицу резервного копирования

Важно: для работы триггеров необходимо использовать формат таблицы INNODB.Триггеры не работают с таблицами MyISAM.

Вы можете добавить поле отметки времени в таблицы резервного копирования, чтобы узнать, когда была вставлена ​​каждая строка.

Документация: http://dev.mysql.com/doc/refman/5.5/en/create-trigger.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...