我试着去执行一个SQL触发器,将更新而不是插入,如果一列hasent变化值..
Id | Name | Income | Date
11 John 10000 2019-02-01
11 John 15000 2019-02-02
此表没有主键,因为这将有多个记录相同的ID,每一个有diferent日期。我想才达到节省一些空间,如果收入hasent变化......例如,如果下一个记录是要及时更新,而不是INSERT:
11 John 15000 2019-02-03
我想触发更新,而不是在表上创建一个新的记录的日期。因此,它最终会像:
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和执行触发器会做相反的,如果将收入变插入一个新的记录,但我不知道这列可我主要做了更新。
我道歉,如果这是一个愚蠢的问题,但其正困扰我一段时间。
非常感谢!
如果你只关心节约空间,我认为你应该只在上个月删除与收入相同的记录您尝试插入新的收入,同量之前。
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
DELETE FROM income_30 where id=NEW.id and date=(select max(date) from income_30);
END IF;
END; //
DELIMITER;