Trigger MySQL - AFTER INSERT

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

2

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

0
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....

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.

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.

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...

0

@Marcin.Miga:

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

1

Bo masz zła składnie tego update:

 UPDATE magazyn77_stan
 set STAN = NEW.ILOSC_PRZED+new.ILOSC_PO
        WHERE ID_TOWARU=NEW.ID_TOWARU;
NEW.Status=1;
0
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 ?

1

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1