ITPub博客

【CONSTRAINT】具有唯一性约束的列是否可以插入空值

原创 Linux操作系统 作者:secooler 时间:2011-04-16 23:23:21 0 删除 编辑
  请快速的回答这个问题:具有唯一性约束的列是否可以插入空值?

很多朋友看到这个问题后的反应过程一般是这样的:

第一反应:这个问题实在是太过简单啦!

进一步地反应:答案为“是”还是“否”呢?有点不太确定!

最后的行动:看看周围有没有朋友,不假思索地就问有没有人知道正确答案!


  这个问题我也被问到过多次!之所以在这里谈到这个“简单问题”。只是想提醒大家:其实很多情况下仅需简单动手测试一下,答案将来得更快更直接,印象也会更深!同时也能提高解决和分析问题的能力,何乐而不为呢?

我来记录一下这个测试过程。

1.创建具有唯一约束的表T
sec@ora10g> create table t (x varchar2(8),constraint uniq_t unique(x));

Table created.

T表仅包含一列X,在X列上创建了唯一约束。

2.测试唯一约束的有效性
sec@ora10g> insert into t values ('secooler');

1 row created.

sec@ora10g> insert into t values ('secooler');
insert into t values ('secooler')
*
ERROR at line 1:
ORA-00001: unique constraint (SEC.UNIQ_T) violated

可见,当插入重复值“secooler”时提示违反了唯一约束条件。

3.验证是否可以插入空值
尝试两种插入方法。
1)使用“null”插入
sec@ora10g> insert into t values (null);

1 row created.

2)使用“''”插入
sec@ora10g> insert into t values ('');

1 row created.

sec@ora10g> commit;

Commit complete.

结论已经非常明显:具有唯一性约束的列是可以插入空值的!

4.验证插入后的内容
为了方便查看插入的空值,这里使用两种比较巧妙的方法进行体现。
sec@ora10g> select '>>'||x||'<<' from t;

'>>'||X||'<<
------------
>>secooler<<
>><<
>><<

sec@ora10g> select nvl(x,'I am NULL value!') from t;

NVL(X,'IAMNULLVA
----------------
secooler
I am NULL value!
I am NULL value!

5.小结
  我一贯主张的是“践行出真知”。 很多朋友倾向于不加思考和动手便去发问。其实只要能静下心来实际测试一下,便会获得很多有趣的知识和快感,时间成本在这里是微不足道的。如若你太过直接地知道了答案,很多精华也就变成了“情感上的垃圾” !

Good luck.

secooler
11.04.16

-- The End --

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/519536/viewspace-692682/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle ACE 总监,OCM联盟(ocmu.org)创始人,恩墨学院(enmoedu.com)创始人,ITPUB Oracle专题深入讨论版版主,资深Oracle数据库专家,北京大学理学硕士,获Oracle OCM 10g 11g认证,ACOUG核心成员,DATAGURU专家团成员,Blogger。Good luck.

注册时间:2008-03-16

  • 博文量
    797
  • 访问量
    7882429