2010-12-29 2 views
1

Я хотел бы сохранить все изменения в моих таблицах (в MySQL). Я создал таблицу «audit» для отслеживания всех изменений всех таблиц в одной таблице (поэтому мне не нужно создавать таблицы аудита для каждой таблицы).Триггеры Mysql: OLD и NEW как строка/xml/параметр?

Затем я создал триггеры для каждой таблицы и хранимую процедуру, которая вставляет запись в таблицу аудита. Параметры хранимой процедуры - это имя табло и первичный идентификатор. Теперь я могу отслеживать даты вставки/обновления/удаления для каждой записи в моей базе данных.

Но я также хотел бы проследить все изменения в DATA с помощью этой процедуры. Для этого мне пришлось бы найти способ использовать записи OLD и NEW из триггеров в хранимой процедуре.

Кто-нибудь знает, как это сделать? Возможно, какая-то сериализация записей OLD и NEW в строку?

+0

Не можете ли вы просто передать значения в соответствии с процедурой, как обычные аргументы? – DrColossos

+0

Я мог бы, но тогда мне пришлось бы писать разные хранимые процедуры для всех моих таблиц, а в некоторых таблицах было более 50 столбцов. Поскольку я использую только 1 таблицу для ведения журнала аудита, я подумал, что было бы неплохо, если бы я мог передавать OLD и NEW в качестве параметра .... но это невозможно, насколько я вижу ... – Dylan

ответ

0

Единственное решение, которое я мог бы получить, это проверка OLD & НОВЫЕ значения каждого поля в моей таблице.

BEGIN 

-- record changes to table log_new 

IF OLD.fieldA != NEW.fieldA 
OR OLD.fieldB != NEW.fieldB 
THEN 

INSERT INTO log_new (