Я пытаюсь реализовать триггер SQL, который будет ОБНОВЛЯТЬ вместо ВСТАВКИ, если значение одного столбца изменилось.
Пример таблицы
Id | Name | Income | Date
11 John 10000 2019-02-01
11 John 15000 2019-02-02
Эта таблица не имеет первичнойКлюч, потому что он будет иметь несколько записей для одного и того же идентификатора, каждая с разной датой.Чего я хочу добиться, чтобы сэкономить место, так это ОБНОВИТЬ вместо ВСТАВКИ, если изменилось затухание дохода ... например, если следующая запись будет:
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 ;
Я также думаю о выполнении ОБНОВЛЕНИЕ вместоВСТАВЬТЕ и выполните триггер, который сделает противоположное, вставит новую запись, если доход изменился, но я не знал, какой столбец я могу сделать первичным для обновления.
Прошу прощения, если это глуповопрос, но это беспокоит меня некоторое время.
Большое спасибо!