Yalnızca yeni satırlar için varsayılan ŞİMDİ () ile zaman damgası sütunu ekle


113

Binlerce satırlık bir masam var. Tablo başlangıçta created_at sütunuyla oluşturulmadığından, bunların oluşturulma zaman damgasını almanın bir yolu yoktur. Gelecekteki satırlar için zaman damgalarını almaya başlamak çok önemlidir.

Varsayılan değeri NOW () olan bir zaman damgası sütunu ekleyebilmemin bir yolu var mı, böylece değerleri önceki satırlara değil, yalnızca gelecekteki satırlara yerleştirebilir mi?

ALTERSorguyu yaparsam, tüm satırları zaman damgasıyla doldurur:

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()

Yanıtlar:


159

Sütunu varsayılan değeriyle eklemeniz ve ardından sütunu varsayılan olacak şekilde nulldeğiştirmeniz gerekir now().

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

43

Varsayılan kuralı alter tablosuyla ekleyebilirsiniz,

ALTER TABLE mytable ADD COLUMN created_at TIMESTAMP DEFAULT NOW()

ardından hemen mevcut tüm mevcut satırları null olarak ayarlayın:

UPDATE mytable SET created_at = NULL

Sonra bu noktadan itibaren DEFAULTyürürlüğe girecek.


Bir güncelleme yapmanın ağırlığını taşıyacak yok olsa o, prensipte iyi olabilir tetikler ateşle.
Philip Couling

8
@Artur: Philip'in sunduğu çözüm, gidilecek yol. UPDATEgerekli değil. Mevcut bir sütuna sütun varsayılanı eklerseniz , zaten var olan satırlar etkilenmez. Varsayılan, yalnızca aynı komuta sütun ve varsayılan eklerseniz doldurulur.
Erwin Brandstetter

9

Örneğin, usersaşağıdaki gibi bir tablo oluşturacağım ve datevarsayılan değer adlı bir sütun vereceğimNOW()

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

Teşekkürler


0

Şöyle bir şey deneyin: -

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

table_nametablonuzun adıyla değiştirerek .


1
Böyle bir CONTSTRAINT'in faydası nedir?
rubo77
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.