Мне нужно создать историю изменений строк таблицы при изменении определенного поля. Итак, я хотел создать триггер для обновления таблицы. Когда поле txta
изменяется, я хочу, чтобы вся строка была скопирована в debug
, который является клонированной версией msser_210
с добавленным столбцом для datetime в конце, без данных. Я хотел бы добавить NOW()
при изменении, чтобы у меня была отметка времени. Вот что я до сих пор пытался:
DELIMITER $$
CREATE TRIGGER history_trigger
BEFORE UPDATE ON msser_210
FOR EACH ROW
BEGIN
IF OLD.txta != NEW.txta
THEN
INSERT INTO `debug_history` (`idpm`,`posn`,`prnb`,`doid`,`ofcr`,`pidm`,`hitm`,`sitm`,`item`,`dsca`,`igid`,`kitm`,`leng`,`widt`,`hght`,`thik`,`radi`,`quas`,`wght`,`effc`,`colr`,`bdat`,`edat`,`back`,`cuid`,`intb`,`aggr`,`unqu`,`oqua`,`unsq`,`stoc`,`allo`,`hall`,`tqan`,`bqan`,`pkey`,`pric`,`cvqs`,`unsp`,`disc`,`dart`,`ksid`,`anhg`,`txta`,`txti`,`mndn`, `changedate`) VALUES (OLD.idpm,OLD.posn,OLD.prnb,OLD.doid,OLD.ofcr,OLD.pidm,OLD.hitm,OLD.sitm,OLD.item,OLD.dsca,OLD.igid,OLD.kitm,OLD.leng,OLD.widt,OLD.hght,OLD.thik,OLD.radi,OLD.quas,OLD.wght,OLD.effc,OLD.colr,OLD.bdat,OLD.edat,OLD.back,OLD.cuid,OLD.intb,OLD.aggr,OLD.unqu,OLD.oqua,OLD.unsq,OLD.stoc,OLD.allo,OLD.hall,OLD.tqan,OLD.bqan,OLD.pkey,OLD.pric,OLD.cvqs,OLD.unsp,OLD.disc,OLD.dart,OLD.ksid,OLD.anhg,OLD.txta,OLD.txti, OLD.mndn, NOW());
END IF;
END;
$$
Почему я хочу это сделать, потому что у нас есть (вероятно) PHP-скрипт с ошибкой, который записывает одну и ту же текстовую строку в каждое поле базы данных, но мы не знаем, когда и почему это происходит, ни какой скрипт это делает. Может есть более элегантное решение?
ОБНОВЛЕНИЕ: я нашел параметр «Отслеживать изменения» в phpMyAdmin, но, по-видимому, он не отслеживает UPDATE
запросы наших программ, выдаваемые php, хотя операторы DROP
и CREATE TABLE
из PHP отслеживаются. Если я отправлю UPDATE
через phpMyAdmin, он будет отслеживаться. Короче говоря, я вернулся к своему первоначальному плану с помощью спускового крючка.
UPDATE2: сам нашел ответ