Dodaj kolumnę sygnatury czasowej z domyślnym TERAZ () tylko dla nowych wierszy


113

Mam tabelę z tysiącami wierszy. Ponieważ początkowo tabela nie została zbudowana z kolumną created_at, nie ma możliwości uzyskania ich sygnatury czasowej utworzenia. Ważne jest jednak, aby zacząć pobierać sygnatury czasowe dla przyszłych wierszy.

Czy istnieje sposób, aby dodać kolumnę sygnatury czasowej z wartością domyślną NOW (), aby nie wypełniała ona wartości w poprzednich wierszach, ale tylko w przyszłych?

Jeśli wykonam ALTERzapytanie, zapełni wszystkie wiersze datownikiem:

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()

Odpowiedzi:


159

Musisz dodać kolumnę z wartością domyślną null, a następnie zmienić kolumnę, aby miała wartość domyślną now().

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

43

Możesz dodać domyślną regułę do tabeli alter,

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()

następnie natychmiast ustaw na null wszystkie bieżące istniejące wiersze:

UPDATE mytable SET created_at = NULL

Od tego momentu DEFAULTzaczną obowiązywać.


Zasadniczo jest to dobre, chociaż niesie ciężar wykonania aktualizacji, która może uruchomić wyzwalacze.
Philip Couling

8
@Artur: Rozwiązanie przedstawione przez Philipa jest drogą do zrobienia. UPDATEto nie jest konieczne. Jeśli dodasz kolumnę domyślną do istniejącej kolumny, nie ma to wpływu na już istniejące wiersze. Wartość domyślna jest wypełniana tylko wtedy, gdy dodasz kolumnę i wartość domyślną w tym samym poleceniu.
Erwin Brandstetter

9

Na przykład utworzę tabelę o nazwie users jak poniżej i podam kolumnę o nazwie datedomyślnejNOW()

create table users_parent (
    user_id     varchar(50),
    full_name   varchar(240),
    login_id_1  varchar(50),
    date        timestamp NOT NULL DEFAULT NOW()
);

Dzięki


0

Spróbuj na przykład: -

ALTER TABLE table_name ADD  CONSTRAINT [DF_table_name_Created] 
DEFAULT (getdate()) FOR [created_at];

zastępując table_namenazwą swojego stołu.


1
jaka jest korzyść z takiego KONTRASTU?
rubo77
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.