Есть таблица:
ID
LOGIN_ID
Start
End
Session_ID
поле Session_ID имеет индекс "Уникальное"
есть скрипт который парсит данные и льет их в таблицу.
Необходимо при нахождении в таблице записи с Session_ID обновлять поле End если новое значение больше чем предыдущее.
Реализовал с помощью триггера Before insert, но получаю ошибку:
""Can't update table 'data' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.""
Возможно как-то по-другому можно такое поведение реализовать, вопрос как?
Триггер:
CREATE TRIGGER `CHECK_SESSION` BEFORE INSERT ON `data`
FOR EACH ROW BEGIN
SET @myVar1 = (SELECT `START` from `data` where `SESSION_ID` = NEW.SESSION_ID and `END` < new.END);
IF(@myVar1 IS NOT NULL) THEN
BEGIN
Insert into `data`(`LOGIN_ID`, `IP`, `SESSION_ID`, `SESSION_START`, `SESSION_TIMESTAMP`) values (new.LOGIN_ID, new.IP, new.SESSION_ID, new.SESSION_START, new.SESSION_TIMESTAMP) ON DUPLICATE KEY UPDATE `SESSION_TIMESTAMP` = new.SESSION_TIMESTAMP;
END;
END IF;
SET @myVar2 = (SELECT `START` from `data` where `SESSION_ID` = NEW.SESSION_ID and `END` > new.END);
IF(@myVar2 IS NOT NULL) THEN
BEGIN
declare msg varchar(128);
set msg = 'Filter!';
signal sqlstate '45000' set message_text = msg;
END;
END IF;
END