我不知道這是可能的,但我想跟蹤表1.mysql的觸發器:跟蹤更改
的變化在數據庫中的以下兩個表存在:
CREATE TABLE IF NOT EXISTS `db`.`table1` (
`idtable1` INT NOT NULL AUTO_INCREMENT,
`A` VARCHAR(45) NULL,
`B` VARCHAR(45) NULL,
`C` VARCHAR(45) NULL,
PRIMARY KEY (`idtable1`))
ENGINE = InnoDB
CREATE TABLE IF NOT EXISTS `db`.`table2history` (
`idtable2history` INT NOT NULL AUTO_INCREMENT,
`columnName` ENUM('A', 'B', 'C') NULL,
`columnPrimaryKey` INT NULL,
`columnNewValue` VARCHAR(45) NULL,
`changetimestamp` DATETIME NULL,
PRIMARY KEY (`idtable2history`))
ENGINE = InnoDB
如果執行了以下說明:
UPDATE table1 SET A="ABC", B="XYZ" WHERE idtable1=50;
的觸發器 「BEFORE UPDATE」 應該執行:
INSERT INTO table2history (idtable2history, columnName, columnPrimaryKey, columnNewValue, changetimestamp)
VALUES (NULL, "A", "50", "ABC", NOW());
INSERT INTO table2history (idtable2history, columnName, columnPrimaryKey, columnNewValue, changetimestamp)
VALUES (NULL, "B", "50", "XYZ", NOW());
如果以下說明執行:
UPDATE table1 SET A="123", B="456", C="789" WHERE idtable1=20;
的觸發器 「BEFORE UPDATE」 應該執行:
INSERT INTO table2history (idtable2history, columnName, columnPrimaryKey, columnNewValue, changetimestamp)
VALUES (NULL, "A", "20", "123", NOW());
INSERT INTO table2history (idtable2history, columnName, columnPrimaryKey, columnNewValue, changetimestamp)
VALUES (NULL, "B", "20", "456", NOW());
INSERT INTO table2history (idtable2history, columnName, columnPrimaryKey, columnNewValue, changetimestamp)
VALUES (NULL, "C", "20", "789", NOW());
你知道的智能解決方案這個問題?
是的,可以這樣做。你試過什麼了? – Shadow
用3個字段創建表的副本。時間戳,存儲插入,刪除或更新的類型以及用戶名字段。在INSERT,UPDATE,DELETE上創建3個TIGERS,將空行放入新表中並添加時間戳,類型和用戶。所以你可以回滾到每一次,看看有什麼變化 –
我感謝你的答案。 @ bernd-buffen感謝您提供可能的解決方案。但是我會完全按照上面的描述來實現它。 –