#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. Я согласен с вышесказанным