组合主键中其中一个字段是否能为null

babilun360 2009-11-03 02:59:44
一张表有其中三个字段 asset1,asset2,equip组成复合主键。
确定一条设备时由asset1+asset2 +equip唯一确定
确定一条资产时equip为null,由asset1+asset2 唯一确定。这样是否可行!先谢过!
...全文
4298 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zaf9 2011-08-04
  • 打赏
  • 举报
回复
主键肯定不能为空,因为主键约束的实现实际上是UNIQUE约束和NOT NULL约束的组合。
zaf9 2011-08-04
  • 打赏
  • 举报
回复
UNIQUE约束要求,对于列或列组合而言,表中每行的值必须是不同的。
UNIQUE约束的怪异之处在于,可以在键列输入NULL值。在键列中,可能有任意数量的包含NULL值得行。
UNIQUE约束通过索引来实施。在定义UNIQUE约束时,Oracle将查看键列上的索引,如果不存在,就创建一个。
索引(称为B*树索引)的结构不包含NULL值,正因为如此,才允许出现多个包含null的行。
选择 WHERE key_column is NULL不使用索引(因为索引不包含NULL),因此总是导致扫描整个表。

所以说组合唯一约束的列可以全为空或某几个为空,列是否能为空是由not null约束决定的。

SQL> create table c (a number(10), b varchar(10),c varchar(10));

Table created.

SQL> alter table c add constraint c_uc unique(a,b,c);

Table altered.

SQL> insert into c values(1,null,null);

1 row created.

SQL> insert into c values(null,null,'c');

1 row created.

SQL> insert into c values(null,null,null);

1 row created.
kantery 2011-02-17
  • 打赏
  • 举报
回复
组合唯一约束也只能空一个
小灰狼W 2009-11-04
  • 打赏
  • 举报
回复
不能为null
如果希望可以为空,可以用组合唯一约束
sky711 2009-11-03
  • 打赏
  • 举报
回复
主键不能为空
iqlife 2009-11-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 liusong_china 的回复:]
主键不可以为空。。。。。。。。

在确定一条资产,你可以将equip字段设为一个非空的固定值,这样还是由asset1+asset2来唯一确定的。
[/Quote]
主键肯定不为空,建议用楼上#1方法
或者只用asset1+asset2作为主键
至于唯一确定看数据是否唯一便可
tianxiaocui2007 2009-11-03
  • 打赏
  • 举报
回复
你的题目矛盾啊,先是三个字段确定一条记录,后又说由其中两个字段确定
不论其中一个是否为空,都是由三个字段确定一条记录。
liusong_china 2009-11-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 babilun360 的回复:]
liusong_china 这样也是可行的!liusong_china:您确定复合主键中的任何一个被设为主键的字段都不为null吧?
[/Quote]

其实你不该来问我确不确定的,呵呵。

自己做个简单的测试就可以了,建一个简单的表,建一个复合主键,然后让主键的一个字段为空插入一下试试,不就得到确定的答案了吗?是吧。

我觉得别人说的都不如自己亲自去测试来得更确定。。。至少自己要去验证一下,呵呵
babilun360 2009-11-03
  • 打赏
  • 举报
回复
liusong_china 这样也是可行的!liusong_china:您确定复合主键中的任何一个被设为主键的字段都不为null吧?
liusong_china 2009-11-03
  • 打赏
  • 举报
回复
主键不可以为空。。。。。。。。

在确定一条资产,你可以将equip字段设为一个非空的固定值,这样还是由asset1+asset2来唯一确定的。

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧