2012-08-10 75 views
1

我有一個表中的Oracle:我怎樣才能確保沒有重複的行插入

NAME  DATE  TIMEOFDAY PAYMENT 
SUBIR 10-08-12  DAY  10000 
SUBIR 10-08-12  NIGHT  12000 

現在我想在Oracle表的修改,使一個用戶可以不pay不止一次在特定的天。舉例來說,我不能插入這樣的:

NAME  DATE  TIMEOFDAY PAYMENT 
SUBIR 10-08-12  DAY  10000 
SUBIR 10-08-12  NIGHT  12000 
SUBIR 10-08-12  DAY  14000 

第三排不應該被以前的兩個記錄後,由於已有已在day上取得了10-08-12支付插入。那麼我怎麼能在oracle表中做這個功能呢?

編輯 - 我想我必須作出datetimeofday複合地unique。可能嗎?我的這種想法背後的原因是,如果我分別將它們分別作爲unique,則不允許用戶第二次輸入具有相同日期的行,但具有不同的timeofday

回答

3

添加上(DATE, TIMEOFDAY)一個UNIQUE約束:

ALTER TABLE tableX 
    ADD CONSTRAINT unique_date_timeofday 
    UNIQUE (DATE, TIMEOFDAY) ; 

這個限制只允許這兩個領域的獨特組合。

+0

我必須做出'DATE'和'TIMEOFADAY'複合「獨特」。可能嗎? – Mistu4u 2012-08-10 14:00:56

+0

這正是這個約束所做的,只允許兩個字段的唯一組合。 – 2012-08-10 14:05:42

2
  1. 如果它的主鍵:

alter table YOUR_TABLE add constraint YOUR_TABLE_PK primary key (DATE, TIMEOFADAY);

  1. 如果您只需要獨特

create unique index YOUR_TABLE_IX1 on YOUR_TABLE_TAB (DATE, TIMEOFADAY);