说明,这里的SQL是在Oracle中作的,同时我对Mysql类似的sql也进行了测试;
对其他数据库进行测试,如果其他数据库对null的处理不一样,请自行测试;
在数据库设计中,应该尽可能将列设计为不能null;如果有特殊情况,应该尽可能的将这列设计一个单独的特殊值来标识
下面先给个实际情况来说明null值的影响:
...
注意:test_null表格里面有3条记录,其中有一条记录status是null;
但是 SQL中无论是选择status = ‘Y’ 还是status != ‘Y’,都不会返回这条记录;
这里可以看到,对应null的行,只有用status is null这样的条件是,才会返回这条记录;
***
所以,如果这个字段可以是null,并且要包含null的情况的话,在oracle中,必须用nvl这样一个函数来,nvl(status,’N’)的意思是如果这个字段是null,就用’N’来代替,如果不是null,就用本来的值;
***
对于 Oracle和mysql来说,null表示不确定的值,所以无论是用=,<,>,!=这些操作符,都不会返回这些记录。
**
所以,在设计数据库的时候,应该尽可能的将这列加上not null限制,避免应用中出现意外的错误;
文章来源:
http://www.hetaoblog.com/db-design-design-not-null-column/