sql server 关于设置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表中只有两行数据,如图:
set ansi_nulls off 时:
set ansi_nulls on 时
总结下来,最优的办法是:在设计表的时候,不要允许字段为null,并为字段附上默认值。
上一篇: 队列链表初始化 入队 出队 清空 判断队列满函数实现(实例源代码)
下一篇: 秋春招总结之MySQL
推荐阅读
-
关于TP3.2框架读取Sql server中文字段数据以及处理乱码的一些小心得
-
SQL Server中关于基数估计计算预估行数的一些方法探讨
-
sql server 关于设置null的一些建议
-
关于SQL Server 数据库归档的一些思考和改进
-
关于TP3.2框架读取Sql server中文字段数据以及处理乱码的一些小心得
-
关于SQL Server中bit类型字段增删查改的一些事
-
DBA应该知道的一些关于SQL Server跟踪标记的使用_MySQL
-
DBA应该知道的一些关于SQL Server跟踪标记的使用_MySQL
-
SQL Server中关于基数估计计算预估行数的一些方法探讨
-
sql server 关于设置null的一些建议