2011-02-02 13 views
24

Czy istnieje sposób, w jaki mysql może automatycznie przechowywać sygnaturę czasową w wierszu rekordu, ilekroć jest tworzony. Próbowałem użyć timestamp (typ danych) z current_timestamp jako wartość domyślną, ale następnie zdałem sobie sprawę, że zostanie zaktualizowany za każdym razem, gdy rekord jest aktualizowany. Potrzebuję tylko czegoś, co będzie przechowywać znacznik czasu tworzenia.mysql automatycznie zapisuje datownik tworzenia nagrania

Dzięki

Odpowiedz

55

Set the DEFAULT constraint to use CURRENT_TIMESTAMP:

CREATE TABLE ... 
    your_date_column DATETIME DEFAULT CURRENT_TIMESTAMP 
    ... 

dla istniejącej tabeli, użyj ALTER TABLE statement:

ALTER TABLE your_table 
ALTER COLUMN date_column SET DEFAULT CURRENT_TIMESTAMP 

Chyba że należy określić wartość dla date_column, domyślnie będzie data, w której została uruchomiona instrukcja INSERT. NULL i DEFAULT lub prawidłowe wartości, aby użyć domyślnego ograniczenia w inny sposób, zakładając, że kolumna jest pusta.

+0

Osobiście OMG, ale tego właśnie próbowałem. Czy ten datownik nie byłby aktualizowany przy każdej aktualizacji rekordu? –

+9

@gaurav: Nie. Jeśli podasz dodatkową klauzulę "NA AKTUALIZACJI", to kolumna zostanie zaktualizowana na AKTUALIZACJI - w przeciwnym razie zostanie pozostawiona sama ... zakładając, że nie określisz innej wartości w AKTUALIZACJI oświadczenie przed kolumną. –

+0

OK, dzięki za oczyszczenie. Doceniony! –

3

Możesz uzyskać pełne informacje na temat sygnatur czasowych w MySQL pod numerem https://dev.mysql.com/doc/refman/5.0/en/timestamp-initialization.html.

Najważniejsze, że jeśli zdefiniujesz kolumnę znacznika czasowego jako klauzulę DEFAULT CURRENT_TIMESTAMP i nie masz klauzuli ON UPDATE, kolumna ma bieżący znacznik czasu dla jej wartości domyślnej, ale nie jest aktualizowany automatycznie.

Ale bądź ostrzeżony. Oczywistą rzeczą, którą chcemy zrobić, jest posiadanie dwóch kolumn sygnatury czasowej, z których jedna to czas utworzenia, a druga to czas ostatniej aktualizacji. Niestety jest to udokumentowane ograniczenie MySQL, którego MySQL nie obsługuje. Nie mam pojęcia, dlaczego MySQL ma tak dziwne ograniczenie - żadna inna główna baza danych nie ma problemów z tym powszechnym przypadkiem użycia.

+0

To ograniczenie zostało zniesione z MySQL w wersji 5.6.5 w kwietniu 2014 http://dev.mysql.com/doc/relnotes/mysql/5.6/en/news-5-6-5.html –

1

FYI = "Datetime" to data i czas. "Datownik" to zmienna data i godzina - czas systemowy.

Tak więc, mają dwie kolumny. One Create Col, One Update Col.

-2

SELECT * FROM test GDZIE znacznik czasu> = CURDATE() I znacznik czasu < CURDATE() + INTERWAŁOWY 1 DZIEŃ ORDER BY znacznik czasu;

0

To polecenie utworzy Tabela cześć
1. id całkowitą
2. create_at z obecnym czasie.

create table hello (id int, created_at datetime DEFAULT CURRENT_TIMESTAMP); 
Powiązane problemy