2011-12-28 10 views
5

Tak więc mam ten wiersz stamp timestamp DEFAULT NOW() ON UPDATE NOW() na moim stole i potrzebuję go do aktualizacji nawet wtedy, gdy wykonywana aktualizacja to w zasadzie te same dane we wszystkich polach.Zaktualizuj tabelę mysql z tymi samymi wartościami i nadal otrzymuj aktualizację znacznika czasowego

Czy jest jakiś sposób to zrobić w deklaracji stole, jak w niektórych innych opcji innej niż on update, czy muszę zmusić stamp = now() każdym razem, kiedy aktualizacji (i usunąć on update oczywiście ponieważ będzie bezużyteczny).

Widziałem this thread, ale tylko odpowiedzi, co się dzieje i dlaczego, a nie jak się wokół niego inne niż zmuszając go pośrednio

Odpowiedz

2

Trzeba by użyć spust aby zmusić go za każdym razem.

DELIMITER GO 

CREATE TRIGGER `mydb`.`mytable_U` BEFORE UPDATE ON `mydb`.`mytable` 
FOR EACH ROW 
BEGIN 
    SET NEW.stamp = CURRENT_TIMESTAMP; 
END 
GO 

DELIMITER ; 
+0

Dzięki, dam to spróbować – Bimp

+0

Hmm, czy mogę ustawić ten wyzwalacz w moim kodzie java przez przypadek, czy to musi być zrobione na zewnątrz? – Bimp

+0

@Jayto: przechodzi do bazy danych. Silnik bazy danych wystrzeliwuje go, gdy wyślesz AKTUALIZACJĘ – gbn

1

I łatwiej po prostu wykonaj następujące czynności w ramach wyciągu aktualizacja:

UPDATE table_name SET last_logged_in = NOW() WHERE `user_id`... 

ten sposób wartość jest zawsze na bieżąco i jeśli nic innego nie zmieniło datownik ciągle aktualizowany. Dziękuję za twoje pytanie; to było to samo co moje.

3

Jak powiedział @veeTrain, byłoby łatwo, gdyby dodać go do oświadczenia aktualizacji. Jest to po prostu inny sposób robienia tego, możesz także użyć unix_timestamp().

UPDATE table_name SET last_logged_in = unix_timestamp() WHERE id = '$user_id'

Wiem, że moja odpowiedź jest późno, ale wpadłem na podobny problem i pomyślałam dzielę rozwiązanie dla tych, napotykając ten wątek w przyszłości.

+0

, który zależy od typu kolumny "last_logged_in". UNIX_TIMESTAMP() zwraca liczbę całkowitą, natomiast NOW() zwraca sformatowany DATETIME. Istnieją powody, aby wybrać jeden z drugim, zobacz to pytanie, aby uzyskać więcej informacji: http://stackoverflow.com/questions/14849911/difference-between-unix-timestamp-and-now-in-mysql – SpaceDog

+1

W porządku, zależy to również od użycie. W razie potrzeby możesz również użyć formatowania PHP: date ("F j, Y, g: i a"); Odniesienia PHP: [tutaj] (http://php.net/manual/en/function.date.php) oraz funkcje Data/czas MySQL: [tutaj] (http://dev.mysql.com/doc/refman/ 5.6/pl/date-and-time-functions.html) – Winter

Powiązane problemy