我想添加一些東西到一個表(觸發?),因此,確切地說,每個ID只有一行具有特定列的特定值。因此,如果運行的語句不是這種情況,那麼將拋出異常並且插入將被回滾。將數據約束寫入表
讓我們來看看這個模式。
ID Current Value
1 Y 0
1 N 0
1 N 2
2 Y 2
而我想要的約束是對於每個ID,恰好一行的電流爲'Y'。
因此,這些語句將不會被執行,並返回相應的錯誤:
insert into table values (1,'Y',1);
insert into table values (3,'N',2);
update table set current = 'N' where ID = 1;
我有兩個問題:
這是個好主意,這種約束邏輯編碼成你的表,還是最適合操作數據的應用程序保存的?爲什麼?
這怎麼辦? oracle提供了什麼樣的工具來創建這樣的約束?
優秀的答案。 – hol
謝謝,這確實看起來像我正在尋找!我不明白這個語法,但我會玩這個,並在我確認後回來接受答案。 – Jeremy
@Jeremy,像其他任何索引一樣 - 普通索引就像'CREATE UNIQUE INDEX index_name ON table_name(column_name)'。在這種情況下,我用一個將非當前行映射爲NULL的表達式替換了'column_name'。 –