2012-08-10 70 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);