我不知道这是可能的,但我想跟踪表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感谢您提供可能的解决方案。但是我会完全按照上面的描述来实现它。 –