我有以下的列在Oracle表測試儀:的Oracle SQL約束where子句
- TesterID
- TesterName
- ISDEFAULT
- APPLICATION_ID
TesterID是主鍵。 現在我希望只能有一個Default Tester,這意味着只有一個Tester可以在應用程序ID處具有IsDefault = Y的值。
我有約束試了一下:
alter table Tester add constraint Tester_ISDEFAULT UNIQUE(IsDefault,Application_ID);
是否有可能使在哪裏ISDEFAULT = Y的唯一關鍵?
感謝您的幫助!
你好,它的工作原理,但我不知道如何。您將IsDefault設置爲索引?什麼意思,然後applicationid,否則爲空? –
基本上,當'IsDefault ='Y''時,您將其應用程序ID存儲在索引中。因此,因爲它是一個* unique *索引,所以如果你嘗試在索引中使用IsDefault = Y再次插入相同的應用程序ID,它將拋出一個異常(因爲該應用程序ID已經在索引中)。 –
只是擴大Joao的解釋 - 通常稱爲「基於功能的索引」。它利用了這樣的事實:如果整個密鑰都是NULL,Oracle不會在索引中存儲任何內容;所以這個索引只在IsDefault ='Y'時才存儲ApplicationId。此外,它是一個唯一的索引,所以它保證只有一行給定的ApplicationId,其中IsDefault ='Y'。 –