Cytat(artega @ 28.06.2008, 07:15:50 )

Jak widać MySQL nie zezwala na aktualizacje nowego rekordu w wyzwalaczu uruchamianym po wprowadzeniu danych. Rozwiązanie może być takie:
CREATE TRIGGER room_reservation_bi BEFORE INSERT ON room_reservation FOR EACH ROW SET NEW.reservation_number = CONCAT_WS('/', LAST_INSERT_ID()+1, MONTH(NOW()), YEAR(NOW()))
Po pierwsze LAST_INSERT_ID() jest niebezpieczne bo co jesli w tym samym czasie gdzie indziej w bazie zostanie dodany ID?
Po drugie jaki to ma sens z BEFORE? Skoro chce dodac nadany ID to skad on go ma wziasc przed insertem?

Cytat(woj_tas @ 28.06.2008, 08:52:39 )

W oraclu problem ten nazywa się "Mutujące tablice" (mutating tables) i występuję tylko w przypadku trigerów wierszowych (row level triggers), czyli tych zawierających opcję FOR EACH ROW. Jeżeli przekształcisz wyzwalacz wierszowy (row triggers) w wyzwalacz poleceniowy (statement
triggers) powinno zadziałać. Niestety nie będziesz miał wtedy dostępu do zmiennych NEW i OLD.
Dotyczy to Oracla, myślę jednak że w MySql jedst podobnie.
Pozdrawiam
I to by się zgadzało

Problem w tym że to co możliwe w Oracle niestety nie jest możliwe w pseudo bazie jaką jest niestety MySQL
Link