SQL Server:理解默认值

3
我正在学习数据库基础课程,其中一道后评估问题是:必须为NOT NULL行设置默认值。是|否?
我认为答案是“是”,因为我回答“否”是错误的,但我不明白为什么是这样。如果问题是:
使用ALTER TABLE添加新列时,NOT NULL列必须设置默认值。
那么我知道这是正确的,并理解原因。是我看错了问题,还是在其他地方误解了什么?
非常感谢任何帮助。 李

“默认值”意味着当值为“NULL”时,它将采用“默认值”。因此,将列设置为“NOT NULL”是正确的吗? - Ilyes
1
我认为你是对的,让我们想象一下我们有一个存货销售表格。对于 NOT NULL 列 PRICE,你可以设置什么默认值? - Stepan Novikov
@LeeMorgan 对于这样的列(FirstName,LastName ...),没有_默认值_。 - Ilyes
@Sami,这就是我的观点,因此问题和答案都是错误的,而我是正确的。现在我得到了确认,所以我能够放心地继续前进,确信自己真正理解了。非常感谢你所有的回答。 - Lee Morgan
2
是的,这个问题甚至没有意义,什么是一个 NOT NULL 的 - Martin Smith
显示剩余2条评论
1个回答

2
您是正确的。当声明一个列为not null时,没有默认定义的要求。如果您查看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 ]
我甚至不确定对于非空列,使用默认定义是否是一个好主意。在许多情况下,你希望插入操作失败,而不是插入一些人为的值。
唯一的关系是当修改有数据的表时:

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

这是相当显然的。现有行将为新列赋予NULL值,但NOT NULL约束不允许这样做,因此需要一个DEFAULT

非常感谢您的解释。我已经给设置问题的人发送了电子邮件,他们现在已将问题从行更正为列,并更正了答案。李 - Lee Morgan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接