2016-01-14 83 views
0

使用NOT NULL約束將新列添加到我的數據庫,但Redshift提醒我應該定義默認值。我認爲NOT NULL的意思是強制定義?NOT NULL約束要求默認值

ALTER TABLE users add column 
    name varchar(255) NOT NULL 
; 

結果:

[Amazon](500310) Invalid operation: ALTER TABLE ADD COLUMN defined as NOT NULL must have a non-null default expression; 

有沒有辦法強迫字段不能爲空?

+0

應該在數據庫中現有行具有什麼樣的價值新列?他們不能爲空,所以你必須添加一個默認的新行。 –

回答

2

NOT NULL是確保列包含的值的正確方法。 然而,因爲你的表已經存在,它已經在它的行會不會有新的name列中的值,因此它們將違反NOT NULL約束。

通過指定一個默認值,您可以確保所有現有行分配該值,從而與您的NOT NULL約束規定。

+0

雖然擺弄我發現我可以在行上創建一個具有NOT NULL約束的新表。你的回答是有道理的,如果一個表已經存在,你不能追溯地添加一個NOT NULL約束,因爲可能有NULL值。當他們要求默認值時,這是表格中的元約束。確切地說, –

+0

。當您創建表格時,您可以添加(或省略)您喜歡的任何約束,因爲沒有要約束的數據。 – Widor

0

如果列NOT NULL,它必須有一個值,對不對?

爲什麼不加:DEFAULT default_expr

+1

一個人並不總是想要一個默認值。 – cpburnz

+0

那麼你會如何遵守NOT NULL約束呢? Downvote完全是不必要的。 – th3o6a1d

+0

我會做的是添加沒有NOT NULL約束的列,使用適當的值填充列,然後更改列以​​添加NOT NULL約束(假設列應該不爲NULL)。 – cpburnz