Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Trigery
Forum PHP.pl > Forum > Bazy danych > MySQL
gWd
Ostatnio przesiadłem się na MySQL 5. Od tego czasu zastanawiam się czy korzystać z trigerów czy tylko z procedur składowanych. Pytam między innymi dlatego, że spotkałem się z opinią, że odchodzi się od nich, właśnie na rzecz procedur.
Ja nadal widzę sporo zastosowań dla trigerów, ale nie chciałbym się pakować w rozwiązania bez przyszłości.
Poradźcie!
sf
Hę? Czy trigger to przypadkiem nie ustawiona procedura składowana na jakąś akcje typu usunięcie / dodanie / edycję? Czy w MySQL może to jakoś inaczej działa? ;>>>
gWd
Nie wydaje mi się. Do trigera nie wysyłasz żadnych parametrów i nie zwraca żadnego wyniku. Dodatkow sam sprawdza czy zaszło zdarzenie.
sf
No to mam takie pytanie w jaki sposób chcesz zrealizować takie zadanie:

Mam tabele :

wiadomości ( id, tytul, tresc, ilosc_komentarzy );

i teraz chce, aby przy kazdym dodaniu komentarza do wiadomosci ilosc_komentarzy sie aktualizowala

bo ja to robie tak, ze tworze procedure skladowana o wartosci zwracanej TRIGGER, nastepnie tworze triggera i podpinam ta funkcje pod tabele wiadomości, przynajmniej tak to dziala w postgresql...

mozesz mi napisac jak to chcesz osiagnac w mysql? chcesz np. w php uruchamiac za kazdym razem przy dodaniu komentarza procedure i podawac jako parametr numer wiadomosci ?
sticker
Od trigerów raczej sie nie odchodzi... nie wiem gdzie to wyczytałeś, ale jakbym miał za każdym razem gdy zmieniam coś w bazie jeszcze musiał jej mówić żeby zrobiła jakąś procedure to by zaprzeczało mojej szanownej leniwej naturze. Jak napisał przedmówca do trigera wrzucasz procedure i po problemie smile.gif
gWd
Rozumiem, że w postgres triger to tylko akcja, tak? W MySQL triger sam zawiera kod, który ma wykonać. Przykład z manuala:
  1. CREATE TRIGGER testref BEFORE INSERT ON test1
  2. FOR EACH ROW BEGIN INSERT INTO test2 SET a2 = NEW.a1;
  3. DELETE FROM test3 WHERE a3 = NEW.a1;
  4. UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
  5. END;

Nie da się wykonać kodu trigera bezpośrednio z php.

Cytat(sticker @ 17.09.2006, 23:08:19 ) *
Od trigerów raczej sie nie odchodzi

Dzięki za opinię. Poczekam, może ktoś jeszcze się wypowie...
macbirdie
Od triggerów się nie odchodzi, szczególnie w przypadku MySQL jest nawet odwrotnie - ta baza zaczyna dojrzewać do poziomu prawdziwych baz SQL, gdzie triggery i procedury składowane są od wieków. winksmiley.jpg

To, na ile wykorzystać procedury i triggery, zależy w zasadzie od Ciebie - ile chcesz zrzucić ciężaru na bazę, a ile logiki biznesowej chcesz zostawić w samej aplikacji.

W moich zastosowaniach triggery i procedury wspomagają jedynie utrzymanie pełnej spójności i poprawności danych już na poziomie samej bazy (np. poprawność PESELu, jego zgodność z datą urodzin i podobne warunki, które niezależne są od implementacji systemu). Jeśli jednak główne zadania aplikacji to np. zarządzanie dużą ilością danych, a w tym przecież sam engine bazy się specjalizuje, warto najbardziej krytyczne elementy systemu wrzucić do samej bazy. Oczywiście jest pewnie jeszcze setka innych powodów, dla których mniejsza lub większa część logiki biznesowej powinna być w bazie lub jej nie powinno być tam wcale. smile.gif
SongoQ
Zadaniem triggera obojetnie w jakiej bazie danych jest to samo. Podejmuje okreslona czynnosc czy to jest wywolaine innej procedury czy funkcji czy bezposrenio wywolanie kodu. MySQL strasznie szybko goni ORACLE (mozna to przeczytac odnosnie zmian jakie sa w MySQL 5.1.11 i co bedzie 5.2. Gdzies na forum MySQLa znalazlem juz info o wprowadzniu do bazy nowego jezyka.

Zastanawiam sie gdzie przeczytales cos takiego ze od triggerow sie odchodzi? Przeciez wprowadznie triggerow do DB to wielki krok do przodu.

Odnosine triggerow w MySQL jest jeden problem wymagane uprawnienie "super" przynajmniej w tej wersji ktora testowalem, a z tego co mi wiadomo malo firm oferujacych ta baze danych pozwoli sobie na cos takiego. Jesli ktos ma info na ten temat prosze o wypowiedzenie sie.
gWd
Cytat(SongoQ @ 18.09.2006, 10:33:59 ) *
Zastanawiam sie gdzie przeczytales cos takiego ze od triggerow sie odchodzi? Przeciez wprowadznie triggerow do DB to wielki krok do przodu.

Odnosine triggerow w MySQL jest jeden problem wymagane uprawnienie "super" przynajmniej w tej wersji ktora testowalem, a z tego co mi wiadomo malo firm oferujacych ta baze danych pozwoli sobie na cos takiego. Jesli ktos ma info na ten temat prosze o wypowiedzenie sie.

O odchodzeniu od trigerów powiedział mi admin z firmy hostującej, kiedy zacząłem go cisnąć o jakieś narzędzie do dodawania trigerów (bo na status superusera nie mam co liczyć) tongue.gif
A ponieważ wydało mi się to dziwne, to wolałem zapytać. Jak widać dobrze zrobiłem smile.gif
Skobi
tak na marginesie, pozdrów tego Admina, musi byc to extra Ziom smile.gif
SongoQ
Spoko. Podobaja mi sie tacy ludzie, jesli cos odbiega od standardu to lepiej powiedziec ze sie odchodzi od takiego wykorzystania na koszt innego.

Nawet na oficjalnym forum MySQLa narzekaja na to wymogl uprawnienia super - miejmy nadzieje ze to zostanie z kolejnymi wersjami poprawione. Bo bedzie funkcjonalnasc ktora nie bedzie wykorzystywana.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.