Trigger MySQL - AFTER INSERT

Trigger MySQL - AFTER INSERT
MS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

Witam
Potrzebuje stworzyć trigger który po utworzeniu w jednej tabeli wiersza robi update tej samej pozycji "stany" w obu tabelach.
Czy jest to chociaż możliwe?
Prosiłbym o jakieś wskazówki
Pozdrawiam

woolfik
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1611
2

Tak :) jest to możliwe :)
Tu masz przykłady:
https://www.mysqltutorial.org/mysql-triggers/mysql-after-insert-trigger/

MS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0
Kopiuj
BEGIN
    IF NEW.WYNIK IS NOT NULL THEN
        INSERT INTO magazyn77_stan(ID, ID_TOWARU, STAN)
        VALUES(new.ID, new.ID_TOWARU, new.STAN);
    END IF;
END$$

Nie działa :( . Co robię nie tak? Totalnie nie rozumiem tych wyzwalaczy....

FA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 218
1

Mówiłeś, że chcesz zrobić update, a tu robisz insert...
No i co to znaczy "w obu tabelach" oraz "tej samej pozycji"?

Zapewne Twoje tabelę mają jakieś nazwy i strukturę. Opisz je, żebyśmy wiedzieli, jak pomóc.

MS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

tabela 1 : magazyn77 ( ID, ID_TOWARU, ILOSC_PRZED, ILOSC_PO, WYNIK, STATUS)
tabela 2 : magazyn77_stan (ID, ID_TOWARU, STAN)

Chciałbym żeby po UPDATE(masz racje to nie insert) w tabeli magazyn77 kolumny ,,WYNIK" która jest działanie (ILOSC_PRZED+ILOSC_PO)
aktualizowała się wartością z kolumny WYNIK, kolumna STAN w drugiej tabeli magazyn77_stan względem tego samego ID_TOWARU.
A po wykonanym update kolumna STATUS wpisała wartość 1 jako wykonane.

Może teraz lepiej rozjaśniłem o co chodzi dokładnie.
Byłbym bardzo wdzięczny za pomoc.

Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
1

"Nie działa", to najczęstszy opis błędu, jaki spotykam...
Pokaż DDL tabel (mam podejrzenie , że w tabeli magazyn777_stan ID jest jednak autoincrement i być może dublujesz wartości).
Poza tym, o ile mnie pamięć nie myli, to chyba w AFTER UPDATE nie zaktualizujesz kolumny status, bo znowu by ci się wyzwalacz włączył i doszedłbyś do "stack overflow" :) (ale nie ten na wwww). Chyyba że w nowszych wersjach to poprawili...

MS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0

@Marcin.Miga:

Kopiuj
BEGIN
    IF NEW.WYNIK <> magazyn77.WYNIK THEN
        UPDATE magazyn77_stan.STAN
        VALUES (set new.STAN = NEW.WYNIK)
        WHERE ID_TOWARU=ID_TOWARU;
    END IF;
END$$

Teraz mam coś takiego , nie mam pojęcia czy to jest dobra składnia
Błąd mam taki:
screenshot-20211006094617.png

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3891
1

Bo masz zła składnie tego update:

Kopiuj
 UPDATE magazyn77_stan
 set STAN = NEW.ILOSC_PRZED+new.ILOSC_PO
        WHERE ID_TOWARU=NEW.ID_TOWARU;
NEW.Status=1;
MS
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 5
0
Kopiuj
BEGIN
    IF NEW.WYNIK <> NEW.ILOSC_PRZED THEN
 UPDATE magazyn77_stan
 set STAN = NEW.ILOSC_PRZED+new.ILOSC_PO
        WHERE ID_TOWARU=NEW.ID_TOWARU;
set NEW.STATUS=1;
    END IF;
END

Teraz mam taki kod: i jest błąd : screenshot-20211006102718.png
Czyli nie da się zrobić jednak w taki sposób tak ?

PA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3891
1

Nie zwróciłem uwagi, jak chcesz zmieniać wiersze w trgiggerze to musi być before insert

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.