2017-10-28 100 views
3

我做一個數據庫基礎課程,並在後評估問題1:的SQL Server:瞭解默認值

的默認值必須爲NOT NULL列設置。真|虛假

我被引導認爲答案是正確的,因爲我回答錯誤,這是錯誤的,問題是我不明白爲什麼它是真實的。

如果問題是:

的默認值必須爲NOT NULL列使用ALTER TABLE添加新的列時設置。

然後我知道這是真的,並理解爲什麼。我是否誤讀了這個問題,還是誤解了其他地方?

任何幫助將不勝感激。 李。

+0

_Default values_表示當值爲_NULL_時,它將採用_Default values_ insted,所以將列設置爲_NOT NULL_是真的嗎? – Sami

+1

我認爲你是對的,讓我們想象一下,我們有一個商品庫存的表。您可以設置爲NOT NULL列PRICE的默認值? –

+0

感謝您的回覆。假設我們有一個firstName和lastName列,它們都不是NULL,那麼你會得到什麼樣的默認值?當然,你會讓服務器響應所需的價值? –

回答

2

你是對的。當列聲明爲not null時,不需要默認定義。這是相當明顯的,如果你看一下syntax diagram for create table

<column_definition> ::= 
column_name <data_type> 
    . . . 
    [ CONSTRAINT constraint_name [ DEFAULT constant_expression ] ] 
    . . . 
    [ NULL | NOT NULL ] 

如果在必要的語法,它看起來更像是這樣的:

<column_definition> ::= 
column_name <data_type> 
    . . . 
    [ CONSTRAINT constraint_name [ DEFAULT constant_expression ] ] 
    . . . 
    [ NULL | NOT NULL [CONSTRAINT constraint_name] DEFAULT constant_expression ] 

我不是即使確定一個默認定義是not null列的好主意。在很多情況下,您會希望insert發生故障,而不是插入一些虛假值。

唯一的關係是,當altering tables有數據:

如果新列不允許空值和表不 空的,必須使用新列添加一個DEFAULT定義,和 在每個現有行的新列中自動加載新列 中的默認值。

這很明顯。對於新列,現有行將獲得NULL值 - 但NOT NULL約束不允許使用該值,因此需要DEFAULT

+0

非常感謝您的解釋。我通過電子郵件向設置問題的人發送電子郵件,他們現在已經逐一修改了問題並更正了答案。背風處 –