Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [TRIGGER]Automatyczne dodawanie daty do nowo dodanego rekordu
darektbg
post
Post #1





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 25.09.2006

Ostrzeżenie: (0%)
-----


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.

Ten post edytował darektbg 16.05.2011, 15:20:55
Go to the top of the page
+Quote Post
Noidea
post
Post #2





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
darektbg
post
Post #3





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 25.09.2006

Ostrzeżenie: (0%)
-----


Zatem poprawna wersja powinna być:
  1. CREATE TRIGGER automatic_date
  2. AFTER INSERT ON packages
  3. FOR EACH ROW SET date=NOW();

?
Go to the top of the page
+Quote Post
pmir13
post
Post #4





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

Ostrzeżenie: (0%)
-----


  1. CREATE TRIGGER automatic_date BEFORE INSERT ON packages
  2. FOR EACH ROW SET NEW.date = NOW()
Go to the top of the page
+Quote Post
vokiel
post
Post #5





Grupa: Zarejestrowani
Postów: 2 592
Pomógł: 445
Dołączył: 12.03.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 05:00