欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

sql server 关于设置null的一些建议

程序员文章站 2022-07-02 23:22:27
我们设计表时,在字段是否允许null值这个问题上,有时会争论一番。数据库牛人kalen delaney则给了一下建议:1,永远不要在用户表中允许null值2,在用户表定义中包含一个not null限制...

我们设计表时,在字段是否允许null值这个问题上,有时会争论一番。

数据库牛人kalen delaney则给了一下建议:

1,永远不要在用户表中允许null值
2,在用户表定义中包含一个not null限制
3,不要依赖数据库属性来控制null值的行为

对于第一点,我们反向说,如果允许null,会给我们带来什么影响。

1,sql 在每条记录中都设置了一个特殊的bitmap来显示哪些允许空值的列上存储的真的是空值。如果是null,在访问每一行的时候sql server都必须对这个bitmap进行解码。
2,允许null还增加了应用程序代码的复杂度,总的添加一些特殊的逻辑来处理这个null值,这常常会导致bug。

第二点,在包含不允许null的列上,要加入一些默认值,如果不允许null,但是还没有加默认值,在没有显示列插入的话,就会造成insert的失败,sql server默认在insert中,对没有显示的列做null插入。

最后一点,主要涉及到于null值的比较。在我们印象中,是用is null,is not null比较呢,还是用=,<>比较呢。这取决于数据库选项ansi nulls,我们不可能更改数据库选项(我们大部分不是dba),但是我们可以使用会话设置set ansi_nulls相当于数据库选项ansi nulls。当这个选项为真是,所有与空值的比较都将得出false,代码必须使用is null条件来判断是否为空,而当这个选项为假时,如果进行比较的两个值都是空值将得出true,sql server允许将 =null作为is null的同义词,将<> null 作为is not null的同义词。

如果忘记这个选项,建议用is null判断空,is not null判断非空。

测试如下:

在t3表中只有两行数据,如图:

sql server 关于设置null的一些建议

set ansi_nulls off 时:

sql server 关于设置null的一些建议

set ansi_nulls on 时

sql server 关于设置null的一些建议

总结下来,最优的办法是:在设计表的时候,不要允许字段为null,并为字段附上默认值

相关标签: sql null