Подтвердить что ты не робот

Добавьте столбец timestamp по умолчанию NOW() только для новых строк

У меня есть таблица с тысячами строк. Поскольку таблица не была построена с использованием столбца created_at изначально, нет способа получить временную метку создания. Крайне важно, однако, начать получать метки времени для будущих строк.

Есть ли способ добавить столбец timestamp со значением по умолчанию NOW(), чтобы он не заполнял значения для предыдущих строк, а только для будущих?

Если я выполняю запрос ALTER, он заполняет все строки меткой времени:

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()
4b9b3361

Ответ 1

Вам нужно добавить столбец со значением по умолчанию null, а затем изменить столбец по умолчанию now().

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

Ответ 2

Вы можете добавить правило по умолчанию с помощью таблицы alter,

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()

то сразу же установите для null все текущие существующие строки:

UPDATE mytable SET created_at = NULL

Затем с этой точки на DEFAULT вступят в силу.

Ответ 3

Попробуйте что-то вроде: -

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

заменив table_name на имя вашей таблицы.

Ответ 4

Например, я создам таблицу с именем users как показано ниже, и назначу столбцу с именем date значение по умолчанию NOW()

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

Спасибо