0
我将每个更新或插入插入到日志表中。我正在使用触发器来执行此操作。MySQL触发器获取列名称
我的问题是,有没有办法知道哪列更新或插入的信息,以及如何检索列名**不是值?
例如:
联系信息改变了用户的电话,所以我希望把日志的列的名称,而不是价值变化。
用户|名称|电话
我将每个更新或插入插入到日志表中。我正在使用触发器来执行此操作。MySQL触发器获取列名称
我的问题是,有没有办法知道哪列更新或插入的信息,以及如何检索列名**不是值?
例如:
联系信息改变了用户的电话,所以我希望把日志的列的名称,而不是价值变化。
用户|名称|电话
没有(简单/内置)方法来获取已更新的列名称。你将不得不为每一列写一张支票。你可以使用prepare sql和information_schema表来解决问题,但是为每一列写入检查将会更干净更快。
FOR EACH ROW BEGIN
SET @Cols = 'Updated Columns: ';
IF OLD.col1 <> NEW.col1 THEN
@Cols = CONCAT(@Cols, 'col1, ');
END IF;
IF OLD.col2 <> NEW.col2 THEN
@Cols = CONCAT(@Cols, 'col2, ');
END IF;
.....
END
谢谢。顺便说一句,@是什么意思? – Skynight
没什么特别的,我总是用@作为变量的前缀,所以我不会在列名和本地触发器/过程变量之间混淆。 –