2016-08-12 12 views
29

Mam tabelę, która ma tysiące wierszy. Ponieważ tabela nie została skonstruowana początkowo z kolumną created_at, nie ma możliwości pobrania znacznika czasu utworzenia. Ważne jest jednak, aby zacząć otrzymywać znaczniki czasu dla przyszłych wierszy.Dodaj kolumnę znacznika czasu z domyślnym NOW() tylko dla nowych wierszy.

Czy istnieje sposób mogę dodać kolumnę datownika z domyślnej wartości NOW(), tak, że nie będzie zapełnić wartości do poprzednich wierszach, ale tylko dla przyszłych te?

Jeśli zrobić kwerendę ALTER, to wypełnia wszystkie wiersze z datownika:

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW() 

Odpowiedz

9

Można dodać domyślną regułę z alter tabeli

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW() 

następnie natychmiast ustawiona na null wszystko bieżące istniejące wiersze:

UPDATE mytable SET created_at = NULL 

Następnie od tego punktu na DEFAULT zacznie obowiązywać.

+0

Jest to z zasady dobre, choć niesie za sobą ciężar aktualizacji, która * może * wyzwalać. –

+0

Czy to w ten sposób. – Artur

+2

@Artur: Rozwiązanie przedstawione przez Philipa to droga. 'UPDATE' nie jest konieczne. Jeśli dodasz kolumnę domyślnie do * istniejącej * kolumny, nie wpłynie to na już istniejące wiersze. Wartość domyślna jest wypełniana tylko wtedy, gdy dodasz kolumnę i wartość domyślną w tym samym poleceniu. –

0

Spróbuj czegoś podobnego

ALTER TABLE nazwa_tabeli ADD CONSTRAINT [DF_table_name_Created] DEFAULT (getdate()) dla opcji [created_at]

zastępującego nazwa_tabeli z nazwą tabeli

48

Trzeba dodać kolumna z domyślną wartością null, a następnie zmień kolumnę na domyślną now().

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP; 
ALTER TABLE mytable ALTER COLUMN created_at SET DEFAULT now();