我有字段表:
接下来我想设置触发器,在更新后写入日志表更改:
CREATE TRIGGER `update_data` AFTER UPDATE on `data_table`
FOR EACH ROW
BEGIN
IF (NEW.data1 != OLD.data1) THEN
INSERT INTO data_tracking set old_value = OLD.data1, new_value = NEW.data1, field = "data1";
END IF;
-- similar for data2
END$$
我还想在data_tracking表中记录进行更改的用户,但是此用户不是触发触发器的原始UPDATE的一部分。我是一种让触发器知道用户需要记录的方法吗?
这是基于PHP的Web服务,具有多个注册用户,可以通过网站进行更改记录 - 我想添加的用户触发。
答案 0 :(得分:1)
由于您希望使用仅为PHP所知的用户名,因此,如果此信息仅在PHP中可用,则MySql无法知道哪个用户触发了更改。这意味着您至少必须在每个更新语句中传递用户,或者将其作为列添加到需要此类触发器的所有表,或者通过将用户名作为附加参数的存储过程执行所有更新。然后你可以摆脱所有的触发器,因为你会使用存储过程,无论如何都可以进行日志记录和更新。
答案 1 :(得分:0)
使用CURRENT_USER
,请参阅MySQL手册:http://dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_current-user