2011-10-11 99 views
0

我将每个更新或插入插入到日志表中。我正在使用触发器来执行此操作。MySQL触发器获取列名称

我的问题是,有没有办法知道哪列更新或插入的信息,以及如何检索列名**不是值?

例如:

联系信息改变了用户的电话,所以我希望把日志的列的名称,而不是价值变化。

用户|名称|电话

回答

1

没有(简单/内置)方法来获取已更新的列名称。你将不得不为每一列写一张支票。你可以使用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 
+0

谢谢。顺便说一句,@是什么意思? – Skynight

+0

没什么特别的,我总是用@作为变量的前缀,所以我不会在列名和本地触发器/过程变量之间混淆。 –