Oracle SQL约束where子句

时间:2012-08-29 11:57:39

标签: sql oracle constraints where clause

我在oracle上有表Tester,其中包含以下列:

  • TesterID
  • TesterName
  • ISDEFAULT
  • APPLICATION_ID

TesterID是主键。 现在我希望只能有一个Default Tester,这意味着只有一个Tester可以在ApplicationID上拥有CalDe IsDefault = Y.

我尝试了约束:

alter table Tester add constraint Tester_ISDEFAULT UNIQUE(IsDefault,Application_ID);

是否可以在isdefault = Y?

的位置设置唯一键

感谢您的帮助!

4 个答案:

答案 0 :(得分:6)

没有UNIQUE约束。但是,您可以改为使用UNIQUE INDEX

CREATE UNIQUE INDEX ApplicationId_Default_Y ON tester (
  CASE WHEN IsDefault = 'Y'
       THEN ApplicationId
       ELSE NULL
  END
);

这是 DEMO

答案 1 :(得分:1)

您可以使用基于函数的唯一索引来执行此操作,而不是这样的约束:

create unique index tester_isdefault on tester 
  (case when isdefault='Y' then application_id end);

由于Oracle没有为全部为空的键创建索引条目,因此只有isdefault ='Y'的行才会出现在索引中。

答案 2 :(得分:0)

该约束不起作用,因为它意味着每个Application_ID只能有两行 - 一个IsDefault = 0,另一个IsDefault = 1.

您可以使用触发器强制执行此逻辑。或者,为什么不在应用程序逻辑中强制执行它呢?

答案 3 :(得分:0)

在测试仪上创建唯一索引tester_ui_1(解码(is_default,'Y',0,tester_id),application_id)