Есть два триггера, которые не могу заставить работать вместе.
Первый
DELIMITER //
CREATE TRIGGER `change_status_to_failed` AFTER UPDATE ON `tasks_dicts`
FOR EACH ROW
BEGIN
DECLARE dicts_count INT;
SELECT COUNT(*) INTO dicts_count FROM (SELECT * FROM tasks_dicts WHERE status NOT IN ('1') AND net_id=NEW.net_id) as alias;
IF (dicts_count=0) THEN
UPDATE tasks SET status='3' WHERE id=NEW.net_id;
END IF;
END
//
DELIMITER ;
Второй
DELIMITER //
CREATE TRIGGER `delete_success_failed` AFTER UPDATE ON `tasks`
FOR EACH ROW
BEGIN
DELETE FROM tasks_dicts WHERE net_id IN(SELECT id FROM tasks WHERE status IN('2', '3'));
END
//
DELIMITER ;
При изменении поля в tasks_dicts ловлю ошибку
#1442 - Can't update table 'tasks_dicts' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
Гугл говорит, что это происходит от того, что таблица на время выполнения триггера блокируется, но как 1 влияет на 2. Буду рад любым советам.
По-отдельности, первый и второй триггер работают как надо.
З.Ы. Переезжать на другую БД не могу, сроки проекта поджимают.