【发布时间】:2019-02-03 22:22:50
【问题描述】:
我正在尝试实现一个 SQL 触发器,如果一列的值发生变化,它将更新而不是插入。
示例表
Id | Name | Income | Date
11 John 10000 2019-02-01
11 John 15000 2019-02-02
这个表没有主键,因为它会有多个相同 ID 的记录,每个记录都有不同的日期。如果收入发生变化,我想节省一些空间是更新而不是插入......例如,如果下一条记录将是:
11 John 15000 2019-02-03
我希望触发器更新 DATE 而不是在表上创建新记录。所以它最终会像:
11 John 10000 2019-02-01
11 John 15000 2019-02-03 <-- Changed!
数据来自记录当天收入的小时表......并且在一天结束时将小时表上的所有记录大量插入到收入表中以保留历史记录。
我尝试了以下触发器,但它没有工作,因为它会锁定。
DELIMITER //
CREATE TRIGGER before_insert_income
BEFORE INSERT ON income_30
FOR EACH ROW
BEGIN
IF NEW.income = (select income from income_30 where ID=NEW.ID and date=(select max(date) from income_30)) THEN
UPDATE income_30 set date = NEW.date where ID=NEW.ID;
END IF;
END; //
DELIMITER ;
我也考虑做一个 UPDATE 而不是 INSERT 并执行一个相反的触发器,如果收入发生变化,将插入一条新记录,但我不知道我可以将哪一列作为更新的主要列。
如果这是一个愚蠢的问题,我很抱歉,但它困扰了我一段时间。
非常感谢!
【问题讨论】: