如何确保没有插入重复的行

时间:2012-08-10 13:53:26

标签: oracle duplicates

我在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

不应在前两个记录之后插入第3行,因为已在day 10-08-12上进行了付款。那么如何在oracle表中创建这个函数呢?

编辑 - 我想我必须datetimeofday复合unique。可能吗?我这样思考的原因是,如果我分别制作unique两个,则不允许用户第二次输入具有相同日期的行但使用不同的timeofday

2 个答案:

答案 0 :(得分:3)

UNIQUE上添加(DATE, TIMEOFDAY)约束:

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

此约束仅允许两个字段的唯一组合。

答案 1 :(得分:2)

  1. 如果是主键:
  2. alter table YOUR_TABLE add constraint YOUR_TABLE_PK primary key (DATE, TIMEOFADAY);

    1. 如果您只需要唯一性
    2. create unique index YOUR_TABLE_IX1 on YOUR_TABLE_TAB (DATE, TIMEOFADAY);