Trigger MySQL - AFTER INSERT

Trigger MySQL - AFTER INSERT
MS
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 3 lata
  • 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:ponad 17 lat
  • Ostatnio:około 18 godzin
  • Postów:1597
2

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

edytowany 1x, ostatnio: woolfik
MS
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 3 lata
  • 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:prawie 5 lat
  • Ostatnio:30 minut
  • Postów:193
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.


Chciałbym kiedyś wiedzieć tyle, by spełniać wymagania na moim obecnym stanowisku :)
edytowany 2x, ostatnio: Fac
MS
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 3 lata
  • 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:prawie 17 lat
  • Ostatnio:8 dni
  • Postów:2792
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:ponad 3 lata
  • Ostatnio:ponad 3 lata
  • 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:ponad 22 lata
  • Ostatnio:około 5 godzin
  • Postów:3876
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:ponad 3 lata
  • Ostatnio:ponad 3 lata
  • 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 ?

Marcin.Miga
Przecież pisałem, że tego nie zrobisz w AFTER UPDATE
PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 5 godzin
  • Postów:3876
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.