当前位置: 代码网 > it编程>数据库>MsSqlserver > sql server 关于设置null的一些建议

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

2024年05月15日 MsSqlserver 我要评论
我们设计表时,在字段是否允许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表中只有两行数据,如图:

https://images.3wcode.com/3wcode/20240515/b_0_202405151046542912.png

set ansi_nulls off 时:

https://images.3wcode.com/3wcode/20240515/b_0_202405151046547053.png

set ansi_nulls on 时

https://images.3wcode.com/3wcode/20240515/b_0_202405151046555925.png

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com