WEB开发网
开发学院数据库MSSQL Server 关于 T-SQL 的几点小九九 阅读

关于 T-SQL 的几点小九九

 2009-06-08 10:31:48 来源:WEB开发网   
核心提示: 您是否发现了什么,一些关于 NULL 的细节,关于 T-SQL 的几点小九九(6),是的,我在创建表的时候显示定义了 NOT NULL,在实际运用过程中,给我带来很多意想不到的思路,一直以来,我都习惯于在任何情况下创建表时候显示声明字段的 NOT NULL 或者 NULL

您是否发现了什么,一些关于 NULL 的细节,是的,我在创建表的时候显示定义了 NOT NULL。一直以来,我都习惯于在任何情况下创建表时候显示声明字段的 NOT NULL 或者 NULL。这是个好习惯,我一直都这么觉得,可为什么是好习惯我却是最近才明了,请您听我细细道来。事实上,如果您在创建表时,不显示声明字段是否为 NULL,SQL Server 会假设其为 NOT NULL。

您会说我的 SQL Server 默认的是允许字段为 NULL 值啊,没错,您的错觉来自于许多与 SQL Server 共同工作的工具或者界面都开启了一个会话设置,使默认为 NULL 值。我们当然也可以通过一个会话设置或数据库选项使 SQL Server 本身默认允许 NULL 值。如果在创建表时列定义中不显示声明 NULL 或者 NOT NULL,然后您把那些脚本放在一台与您之前使用过的服务器,有着不同默认设置的数据库服务器上执行,将得到相反的结果。

您是否还发现,我实际上在创建 ProcurementPlan 表时,将其所有列均声明为 NOT NULL,并且在逻辑上本应该可以允许为 NULL 值的列上定义了默认值,这又是为什么呢?简单点说吧,要处理 NULL 值给存储引擎增加了复杂度,因为 SQL Server 在每条记录中都设置了一个特殊的 bitmap 来显示哪些允许 NULL 的列上存储的真的是空值。如果允许 NULL,在访问每一行的时候 SQL Server 都必须对这个 bitmap 进行解码。更进一步说,允许 NULL 值同时也增加了应用程序的复杂度,因为总是要编写一些特殊的逻辑来处理空值的情况。

因为 NULL 值的一些微妙之处,我遵从了 Kalen Delaney 导师给出的意见:?可能的话,将表中所有的列都显示的声明为 NOT NULL,并且为丢失的或未知的项定义默认值。说真的,我觉得这个建议非常的棒,在实际运用过程中,给我带来很多意想不到的思路,例如下面我将描述的最后一个话题。

上一页  1 2 3 4 5 6 7 8  下一页

Tags:关于 SQL 小九九

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接