当前位置: 移动技术网 > IT编程>数据库>MSSQL > sql server 关于设置null的一些建议

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

2017年12月01日  | 移动技术网IT编程  | 我要评论

枫情音乐论坛,ejr众创互助平台,清心书卷哪里买

我们设计表时,在字段是否允许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表中只有两行数据,如图:

http://www.lhsxpumps.com/_images4/10qianwan/20190528/b_0_201905281652538037.png

set ansi_nulls off 时:

http://www.lhsxpumps.com/_images4/10qianwan/20190528/b_0_201905281652539323.png

set ansi_nulls on 时

http://www.lhsxpumps.com/_images4/10qianwan/20190528/b_0_201905281652537379.png

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网