Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [TRIGGER]Automatyczne dodawanie daty do nowo dodanego rekordu
Forum PHP.pl > Forum > Bazy danych > MySQL
darektbg
Jest tabelka w której jest pole date. Dla każdego nowo dodanego rekordu automatycznie powinna się aktualizować data. Niestety stworzony przeze mnie TRIGGER nie działa poprawnie, po dodanym rekordzie a polu date mam 0000-00-00 00:00:00
  1. CREATE TABLE `packages` (
  2. (...)
  3. `date` DATETIME NOT NULL,
  4. (...)
  5. ) ENGINE = INNODB
  6.  
  7.  
  8. CREATE TRIGGER automatic_date
  9. AFTER INSERT ON packages
  10. FOR EACH ROW SET NEW.date=NOW();


Z góry dziękuję za wszelkie uwagi.
Noidea
W triggerach typu AFTER operujesz na zaktualizowanej już tabeli.
W triggerach typu BEFORE operujesz na wierszach, które dopiero będą wstawione (słowo kluczowe NEW)

Ty zrobiłeś mix obu metod
darektbg
Zatem poprawna wersja powinna być:
  1. CREATE TRIGGER automatic_date
  2. AFTER INSERT ON packages
  3. FOR EACH ROW SET date=NOW();

?
pmir13
  1. CREATE TRIGGER automatic_date BEFORE INSERT ON packages
  2. FOR EACH ROW SET NEW.date = NOW()
vokiel
W MySQL jest takie coś jak timestamp, który może być automatycznie wstawiany do jednej kolumny w tabeli po każdej zmianie rekordu.
Czyli, dla Twojego przypadku, tabela `packages`, kolumna `timestamp` przyjmuje typ wartości TIMESTAMP, który po aktualizacji rekordu jest automatycznie aktualizowany ON UPDATE CURRENT_TIMESTAMP

  1. ALTER TABLE `packages` CHANGE `timestamp` `timestamp` TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
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.