我想將UNIQUE約束放在2列colA和colB上。一旦限制被設置它將確保可樂COLB值的該組合是獨一無二的,具有不可互換值的多列的唯一約束
還應該確保,例如,
對於在表中的行,如果可口可樂值是100 & colB值爲101,那麼對於該表中的任何其他行,colA值不能爲101,colB值不能爲100。
請建議。
問候, 薩欽
我想將UNIQUE約束放在2列colA和colB上。一旦限制被設置它將確保可樂COLB值的該組合是獨一無二的,具有不可互換值的多列的唯一約束
還應該確保,例如,
對於在表中的行,如果可口可樂值是100 & colB值爲101,那麼對於該表中的任何其他行,colA值不能爲101,colB值不能爲100。
請建議。
問候, 薩欽
Check
和unique index
。
create table uni(colA number, colB number);
ALTER TABLE uni ADD CONSTRAINT constraint_name check(cola != colb);
create unique index uni_idx on uni( LEAST(cola , colb),GREATEST(cola , colb));
insert into uni values (100,101); (OK)
into uni values (100,102); (OK)
into uni values (101,100); (error)
into uni values (100,100); (error)
是的你是對的,我忘記從索引 –
中刪除'||'我將如何檢查WHERE子句中該索引的有效性?我的意思是,SELECT * FROM uni WHERE LEAST(可樂,科爾布)= GREATEST(可樂,科爾布)?或者像這樣的其他一些代碼? –
但你爲什麼要檢查它?做插入和處理兩個例外('ORA-02290,ORA-00001') –
強制執行(通過'CHECK')colA'總是小於'colB'嗎? –
不,不是colA總是小於colB的情況。對於表中的任何ID,colA和colB的值不能互換。如果您需要進一步解釋,請告訴我。儘管CHECK約束的解決方案應該是可以接受的。 –