SQLServer对设置null的建议
当我们设计一个表时,我们有时会争论字段中是否允许空值。Kalen Delaney,数据库中的男人,给了一个建议:
1,绝不允许在用户表中允许空值。
2,用户表定义中没有空限制。
3,不要依赖数据库属性来控制空值的行为。
对于第一点,我们反转,如果我们允许null,它会给我们带来什么影响。
1,SQL在每个记录中设置一个特殊位图,以显示允许空值的列中哪些是空值。
2,允许null增加应用程序代码的复杂性,并添加一些特殊的逻辑来处理空值,这常常导致错误。
第二,包括不允许在null列上添加一些默认值,如果不允许null,但没有默认值,它不会在插入列中显示,会导致插入失败,插入中的SQL Server默认值,不显示空插入列。
最后一点是关于空值的比较。在我们的印象中,是为空,不为空,或=,< >比较。这取决于数据库选项ANSI NULLS。我们更改数据库选项是不可能的(我们中的大多数都不是DBA),但是我们可以使用会话设置ansi_nulls,这相当于数据库选项ANSI NULLS。当这个选项是正确的,所有与空值的比较将得到错误的代码必须使用是无效的判断它是空的,当这个选项是错误的,如果这两个值与空值将得到真正的SQL服务器,允许为空值被用来作为一个同义词是空<>空,将同义词是无效的。
如果您忘记了这个选项,建议使用null来判断空,而不是NULL不是空的。
测试如下:
在T3表中只有两行数据,如图:
ansi_nulls下集:
ansi_nulls上集
最好的总结方法是,当设计表时,不要让字段为null,而字段被附加到默认值。