你遇到的困难都可以通过编写一些额外的代码来解决。让我们一步一步地来解决这些问题。
1. 首先,你可以将old_value和new_value的数据类型定义为JSON或者文本类型,以便能够保存任意类型的值。下面是修改后的表创建语句:
CREATE TABLE employee_info_update (
update_column VARCHAR(20),
old_value TEXT,
new_value TEXT
);
2. 当一条UPDATE语句更新多个字段时,你需要在触发器中使用FOR EACH STATEMENT来处理整个更新语句,而不是每行触发。然后,你可以使用NEW和OLD关键字来获取旧值和新值,并使用IF条件判断每个字段是否有变化。以下是修改后的触发器创建语句:
CREATE TRIGGER update_employee_info
AFTER UPDATE ON employee_1
FOR EACH STATEMENT
BEGIN
IF NEW.department != OLD.department THEN
INSERT INTO employee_info_update (update_column, old_value, new_value)
VALUES ('department', OLD.department, NEW.department);
END IF;
IF NEW.age != OLD.age THEN
INSERT INTO employee_info_update (update_column, old_value, new_value)
VALUES ('age', OLD.age, NEW.age);
END IF;
-- 添加其他需要更新的字段的判断和插入语句
END;
3. 为了判断更新了哪几个字段,你需要在触发器中逐个字段进行判断,并将更新的字段名称和值插入到新的表中。以上面的代码为例,我们判断了department和age这两个字段是否有变化,并将其更新结果保存到employee_info_update表中。
通过以上的修改,你可以实现在更新数据表时将更新字段名称、字段原值和现值保存在一张新表中。希望这些解决方案能对你有所帮助!如果还有其他问题,请随时提问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |