Таблица истории MYSQL

#mysql

Вопрос:

Я использую MYSQL с PHP для базы данных студентов.

Всякий раз, когда я обновляю информацию о студенте, я хотел бы вести учет предыдущих значений.

Прямо сейчас у меня есть триггер, настроенный для вставки всего обновления в таблицу истории, которая является дубликатом таблицы «Студенты» с несколькими добавленными столбцами: действие и отметка времени.

 before update
on Students
for each row
INSERT INTO StudentHistory SELECT 'update', NULL, NOW(), d.*
FROM Students AS d WHERE d.ID = NEW.ID;
 

Однако, поскольку в этой таблице около 20 полей, я бы предпочел не иметь такого количества дубликатов данных, если бы было обновлено только одно поле.

Есть ли способ вставить в таблицу истории только те столбцы, которые действительно изменились?

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

Комментарии:

1. Кроме того, триггер должен вставлять СТАРЫЕ и/или НОВЫЕ значения, а не выбирать. «Я бы предпочел, чтобы у меня было не так много дубликатов данных». Лично я бы взял все СТАРЫЕ и НОВЫЕ в 1 строку, так проще (для меня) кодировать, чтобы показывать изменения, а диск дешев.

2. Я согласен с вышесказанным