Mi almacenamiento es INNODB, Estoy tratando de crear un disparador con 2 consultas en la instrucción IF. Abajo se puede ver el detonante que me da el errorMysql Trigger con SI ENTONCES
delimiter |
CREATE TRIGGER count_delete_videos BEFORE DELETE ON videos
FOR EACH ROW BEGIN
UPDATE counts SET count = count - 1 WHERE name = 'all';
IF OLD.published = 1 THEN
DELETE FROM videos_categories WHERE id_video = OLD.id;
DELETE FROM videos_tags WHERE id_video = OLD.id;
END IF;
END;
|
delimiter ;
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= OLD.id;
END IF;
END' at line 6
Estos son los 2 factores desencadenantes que i activo con el primero.
delimiter |
CREATE TRIGGER count_delete_videos_tags AFTER DELETE ON videos_tags
FOR EACH ROW BEGIN
UPDATE tags SET count = count - 1 WHERE id = OLD.id_tag;
END;
|
delimiter ;
delimiter |
CREATE TRIGGER count_delete_videos_categories AFTER DELETE ON videos_categories
FOR EACH ROW BEGIN
UPDATE categories SET count = count - 1 WHERE id = OLD.id_category;
IF OLD.id_category <> 20 AND OLD.id_category <> 34 THEN
UPDATE counts SET count=count-1 WHERE name='english';
ELSEIF OLD.id_category = 34 THEN
UPDATE counts SET count=count-1 WHERE name='german';
ELSEIF OLD.id_category = 20 THEN
UPDATE counts SET count=count-1 WHERE name='italian';
END IF;
END;
|
delimiter ;
Pero éste funciona perfectamente
delimiter |
CREATE TRIGGER count_delete_videos BEFORE DELETE ON videos
FOR EACH ROW BEGIN
UPDATE counts SET count = count - 1 WHERE name = 'all';
IF OLD.published = 1 THEN
DELETE FROM videos_categories WHERE id_video = OLD.id;
END IF;
END;
|
delimiter ;
Query OK, 0 rows affected (0.16 sec)
¿Cómo puedo hacer el trabajo primero gatillo? ¿Qué estoy haciendo mal? Thx por ayudarme.
¿podría dar la cláusula if dos veces para cada declaración de eliminación y ver? – nawfal
(Excepto por los contadores), ¿sabe que puede tener el mismo comportamiento con una restricción de clave externa (una de cada tabla) a la tabla 'video', definiendo los FK con' ON DELETE CASCADE'? –
sí lo sé, pero en foreing keys los disparadores en mysql no se activan, entonces debo eliminarlos con otro disparador para que estas consultas activen otros disparadores –