SQL Server:了解默认值

时间:2017-10-28 08:57:35

标签: sql sql-server

我正在进行数据库基础课程,后评估中的一个问题是:

  

必须为NOT NULL行设置默认值。 TRUE | FALSE

我被引导相信答案是真的,因为我回答错误而且这是错误的,问题是我不明白为什么这是真的。

如果问题是:

  

使用ALTER TABLE添加新列时,必须为NOT NULL列设置默认值。

然后我知道这是真的,理解为什么。我误解了这个问题,还是我在其他地方误解了什么?

任何帮助将不胜感激。 李。

1 个答案:

答案 0 :(得分:2)

你是对的。声明<column_definition> ::= column_name <data_type> . . . [ CONSTRAINT constraint_name [ DEFAULT constant_expression ] ] . . . [ NULL | NOT NULL ] 列时,不需要默认定义。如果你看一下syntax diagram for create table

,这一点就很明显了
<column_definition> ::=  
column_name <data_type>  
    . . . 
    [ CONSTRAINT constraint_name [ DEFAULT constant_expression ] ]  
    . . .  
    [ NULL | NOT NULL [CONSTRAINT constraint_name] DEFAULT constant_expression ]

如果需要的语法,它看起来更像是这样:

not null

我甚至不确定insert列的默认定义是个好主意。在许多情况下,您希望DEFAULT失败而不是插入一些人为值。

唯一的关系是altering tables有数据的时候:

  

如果新列不允许空值而表格不允许   为空,必须在新列中添加NULL定义,并且   新列自动加载新的默认值   每个现有行中的列。

这很明显。新列的现有行将被赋予NOT NULL值 - 但DEFAULT约束不允许这样做,因此需要{{1}}。