Il mio spazio di archiviazione è INNODB, Sto provando a creare un trigger con 2 query nell'istruzione IF. Giù si può vedere il trigger che mi dà l'erroreMysql trigger con IF THEN
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
questo sono i 2 trigger che posso attivare con il primo.
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 ;
Ma questo funziona perfettamente
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)
Come posso fare prima opera grilletto? cosa sto facendo di sbagliato? Thx per avermi aiutato.
potresti fornire la clausola if due volte per ogni istruzione delete e vedere? – nawfal
(Ad eccezione dei contatori), sai che puoi avere lo stesso comportamento con un vincolo di chiave esterna (uno da ogni tabella) alla tabella 'video', definendo gli FK con' ON DELETE CASCADE'? –
sì lo so, ma su trigger di chiavi di foreing in mysql non si attiva, quindi devo cancellarlo con un altro trigger così questa query attiva altri trigger –