想建一个约束,请帮忙

[复制链接]
查看11 | 回复9 | 2008-3-31 20:44:40 | 显示全部楼层 |阅读模式
我想在表上建一个约束,大致是这样的:
create table t(id number,num number);

1。(id,num)具有唯一性约束
2。id 不为空,num可为空
3。当num为空时,则要保证(id)具有唯一性.比如有记录(1,null),则不再允许有记录(1,1),(1,2),(1,3)...
请问这样的约束可以实现吗?
回复

使用道具 举报

千问 | 2008-3-31 20:44:40 | 显示全部楼层
我想过用触发器,但是标准的触发器不能select触发器所在的表,自治事务的触发器虽然能select触发器所在的表,但是不能select主事务没有提交的数据...这样就实现不了约束了
回复

使用道具 举报

千问 | 2008-3-31 20:44:40 | 显示全部楼层
按你的要求去做三个约束就可以了
回复

使用道具 举报

千问 | 2008-3-31 20:44:40 | 显示全部楼层
前两个要求挺好实现的,可这第三个要求要怎么做呢?请指点~
回复

使用道具 举报

千问 | 2008-3-31 20:44:40 | 显示全部楼层
原帖由 ts_keta 于 2008-3-25 17:32 发表
我想在表上建一个约束,大致是这样的:
create table t(id number,num number);

1。(id,num)具有唯一性约束
2。id 不为空,num可为空
3。当num为空时,则要保证(id)具有唯一性.比如有记录(1,null),则不再允许有记录(1,1),(1,2),(1,3)...
请问这样的约束可以实现吗?

关于第三点,若已有记录(1,1),(1,2),(1,3).那么再插入记录(1,null)应该如何?
回复

使用道具 举报

千问 | 2008-3-31 20:44:40 | 显示全部楼层
关于第三点,若已有记录(1,1),(1,2),(1,3).那么再插入记录(1,null)应该如何?
这样也不行的
回复

使用道具 举报

千问 | 2008-3-31 20:44:40 | 显示全部楼层
原帖由 xilangxiangwa 于 2008-3-25 17:36 发表
按你的要求去做三个约束就可以了

刚才急着去吃饭,说错了.
在id上建立非空约束,再
建立一个id与num的组合唯一约束即可
回复

使用道具 举报

千问 | 2008-3-31 20:44:40 | 显示全部楼层
组合约束想了好久,也不知道该怎么做好
是不是我太笨了。。。还望指点啊
[ 本帖最后由 ts_keta 于 2008-3-25 18:20 编辑 ]
回复

使用道具 举报

千问 | 2008-3-31 20:44:40 | 显示全部楼层
试试可不可以
alter table t add constraint
uq_sfz unique(id,num);
回复

使用道具 举报

千问 | 2008-3-31 20:44:40 | 显示全部楼层
。。。肯定不行啦
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行