
Tym razem mam problem z utworzeniem triggera. Przewertowałem sporą część linków dotyczących tworzenia triggerów ale za Chiny nie mogę sobie poradzić z małą pierdołą. Chciałbym aby trigger był odpalany po wpisaniu, modyfikacji lub usunięciu danych z tabeli. W związku z czym napisałem:
DELIMITER | CREATE TRIGGER update_category_items_t AFTER INSERT OR UPDATE OR DELETE ON card_category FOR EACH ROW BEGIN END| DELIMITER ;
co kończy się błędem:
Cytat
Script line: 21 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 'OR UPDATE OR DELETE ON card_category FOR EACH ROW
BEGIN
END' at line 1
BEGIN
END' at line 1
O co chodzi? Próbowałem również magicznych konstrukcji (gdzieś znalazłem taki przykład) z:
... AFTER INSERT ON card_category OR UPDATE ON card_category ...
oraz:
... AFTER INSERT OR AFTER UPDATE OR AFTER DELETE ...
co również nie działa.
Moja wersja MySQL to 5.0.27.
Pozdrawiam,
pion
// EDIT:
Jest jeszcze ciekawsze zjawisko! Na razie chciałem utworzyć 3 osobne triggery, w związku z czym zrobiłem to tak:
DROP TRIGGER update_category_items_tai; DROP TRIGGER update_category_items_tau; -- linia 19 DROP TRIGGER update_category_items_tad; -- linia 20 DELIMITER | CREATE TRIGGER update_category_items_tai AFTER INSERT ON card_category FOR EACH ROW BEGIN CALL update_category_items (NEW.category_id); END| CREATE TRIGGER update_category_items_tau AFTER UPDATE ON card_category FOR EACH ROW -- linia 28 BEGIN CALL update_category_items (OLD.category_id); CALL update_category_items (NEW.category_id); END| CREATE TRIGGER update_category_items_tad AFTER DELETE ON card_category FOR EACH ROW -- linia 34 BEGIN CALL update_category_items (OLD.category_id); END| DELIMITER ;
Wywołaniem powyższego kodu skutkuje w:
Cytat
Script line: 19 Trigger does not exist
Script line: 20 Trigger does not exist
Script line: 28 Trigger already exists
Script line: 34 Trigger already exists
Script line: 20 Trigger does not exist
Script line: 28 Trigger already exists
Script line: 34 Trigger already exists
Nie rozumiem tu czegoś: dlaczego najpierw wypisywane jest, że trigger nie istnieje, a później, że już istnieje? W rezultacie zawsze dodawany jest tylko pierwszy trigger czyli update_category_items_tai.
Co robię źle?
