posts - 24,  comments - 0,  trackbacks - 0
一个字段如果设为“NULL”,表示如果这个字段的值为空时,自动插入一个“NULL”值。

一个字段如果设为“NOT NULL”,表示如果这个字段的值为空时,不自动插入“NULL”值(任其无值)。

所以,设为“NULL”的意思反而是“不能无值”(由MYSQL自动赋“NULL”值),而设为“NOT NULL”是“可以无值”。

其实要证明这一点很简单,建一个测试表,两个字段(VC型),一个设为“NULL”,一个设为“NOT NULL”,两个都插入空值,看看结果就明白了。
 
NULL 不是 '' 也不是 0。
你的字段定义为 not null,但是却赋值了一个 null,那么数据库系统会按照该字段类型选择一个默认的值放进去,比如 char 就是用空字符串。
但注意,空字符串其实已经是一个确定的值了,就是一个长度为 0 的字符串!

至于 NULL 值,给你一个正确的理解:把 NULL 理解为 UNKNOWN。
主要意思是'不知道',就是它可能是任何值;
另外一层意思是'信息缺失',比如某个存储姓名信息的字段值是 NULL,代表姓名信息缺失。
所以 NULL 值不是任意一个确定的值!

举例来说,逻辑 与/或 运算会的吧?
与运算:true and true = true, true and false = false, false and true = false, false and false = false
[code]
mysql> select true and null, false and null, null and null;
+---------------+----------------+---------------+
| true and null | false and null | null and null |
+---------------+----------------+---------------+
        NULL |              0 |          NULL |
+---------------+----------------+---------------+
[/code]
第一个 true and null,它的结果完全靠 null 确定。如果它是 true 结果就是 true,如果它是 false,结果就是 false。因为 null 代表不知道,所以结果也是不知道,所以是 null。

第二个 false and null,它的结果不需要靠 null 确定,因为 and 运算的特性,有 false 出 false,所以结果是 false。

第三个 null and null,就好理解了吧,它完全就是空对空了,两个操作数都是不知道,结果自然也是不知道,所以是 null。

同理你也可以用 或 运算来验证。
posted on 2008-11-09 11:14 血海狂鲨 阅读(447) 评论(0)  编辑 收藏 引用 网摘 所属分类: PHP

只有注册用户登录后才能发表评论。
网站导航:
<2024年3月>
252627282912
3456789
10111213141516
17181920212223
24252627282930
31123456

留言簿(1)

随笔分类(20)

随笔档案(24)

相册

www.csdn.net

搜索

  •  

最新评论

阅读排行榜

评论排行榜