LINUX.ORG.RU

Сообщения AtomicMan

 

Сложные условия в процедурах\триггерах MySQL

Форум — Web-development

Есть такой вот триггер

DELIMITER //
CREATE TRIGGER `change_status_to_failed` AFTER UPDATE ON `tasks_dicts` 
FOR EACH ROW 
BEGIN
   	DECLARE dicts_count INT;
	DECLARE stat 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;
		UPDATE tasks SET forDelete='1' WHERE id=NEW.net_id;
	END IF;
	SELECT status INTO stat FROM tasks WHERE id=NEW.net_id;
	IF (dicts_count!=0 AND stat='3') THEN
		UPDATE tasks SET status='0' WHERE id=NEW.net_id;
	END IF;
END
//
DELIMITER ;

Второе условие никак не хочет работать. Переписывал как два вложенных условия, результат один - не работает. ЧЯДНТ?

P.S. Естественно все запросы валидные. Не работает только второй if, первый все выполняет.

 , , ,

AtomicMan
()

MySQL Error #1442

Форум — Web-development

Есть два триггера, которые не могу заставить работать вместе.

Первый

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. Буду рад любым советам.

По-отдельности, первый и второй триггер работают как надо.

З.Ы. Переезжать на другую БД не могу, сроки проекта поджимают.

 , , ,

AtomicMan
()

Не работает контекстное меню

Форум — General

После обновления софта (apt-get upgrade) перестало нормально работать контекстное меню терминала. Появляется белая маленькая линия в левом верхнем углу. Что либо посмотреть или выбрать в ней нельзя. Стоит Kali Linux 2016.1. Прикол в том, что пришлось переустановить линь. До этого после такого же обновления все шикарно работало. ПЫСЫ. С рабочего стола исчезли иконки терминала и firefox.

 , ,

AtomicMan
()

RSS подписка на новые темы