Guten Tag :-)
ich schaue mir gerade ein paar Beispiele zum Aufbau eines Triggers an und diese haben irgendwie alle eine feste Zuweisung der Spaltennamen (Old.spaltenname). Insgesamt habe ich aber ca. 50 Tabellen mit durchschnittlich 60 Spalten und ich wollte eigentlich nicht jede Spalte erneut im Trigger fest definieren.
Naiv wie ich bin hatte ich mir im Kopf das so gedacht:
Ich möchte den User, den Tabellen und Spaltennamen in dem der Wert geändert wurde sowie den vorherigen und den neuen Wert speichern. Unter action steht dann halt ob es ein ein Update oder Insert war. Delete gibt es eh nicht :-)
Muss ich wirklich für JEDE Spalte eine Abfrage ala "IF NEW.blub<> OLD.blubTHEN " schreiben um oldValue, newValue und columnName zu füllen oder gibt es auch irgendeine dynamische Möglichkeit?
Hoffe mein Anliegen ist verständlich genug...
Vielen Dank :-)
ich schaue mir gerade ein paar Beispiele zum Aufbau eines Triggers an und diese haben irgendwie alle eine feste Zuweisung der Spaltennamen (Old.spaltenname). Insgesamt habe ich aber ca. 50 Tabellen mit durchschnittlich 60 Spalten und ich wollte eigentlich nicht jede Spalte erneut im Trigger fest definieren.
Naiv wie ich bin hatte ich mir im Kopf das so gedacht:
SQL:
CREATE TABLE triggerTable_audit (
id INT AUTO_INCREMENT PRIMARY KEY,
userId CHAR(36) NOT NULL,
tableName VARCHAR(60) DEFAULT Null,
columnName VARCHAR(60) DEFAULT Null,
oldValue longtext NOT NULL,
newValue longtext NOT NULL,
changedate DATETIME DEFAULT NULL,
action VARCHAR(50) DEFAULT NULL
);
Ich möchte den User, den Tabellen und Spaltennamen in dem der Wert geändert wurde sowie den vorherigen und den neuen Wert speichern. Unter action steht dann halt ob es ein ein Update oder Insert war. Delete gibt es eh nicht :-)
SQL:
CREATE TRIGGER before_table_update
BEFORE UPDATE ON ganzVieleTabellen
FOR EACH ROW
INSERT INTO triggerTable_audit
SET action = 'update',
userId = OLD.userId,
tableName = 'ganzVieleTabellen',
columnName = .....
oldValue = OLD....,
newValue = OLD.....,
changedat = NOW();
Muss ich wirklich für JEDE Spalte eine Abfrage ala "IF NEW.blub<> OLD.blubTHEN " schreiben um oldValue, newValue und columnName zu füllen oder gibt es auch irgendeine dynamische Möglichkeit?
Hoffe mein Anliegen ist verständlich genug...
Vielen Dank :-)