防止在Oracle中重复插入数据

时间:2016-01-07 01:11:51

标签: sql oracle11g

我有三个领域的COBA表,他们是NOMER,NAMA,KETERANGAN。在表格中存在这样的数据:

table COBA

我想在该表中插入另一个值,但是如何防止在oracle中重复插入查询数据? 我试过使用WHERE NOT EXIST,这是我的查询:

INSERT INTO COBA(NOMER, NAMA, KETERANGAN)
(SELECT '2','FIAN', 'JEKULO'
FROM DUAL
WHERE NOT EXISTS (SELECT * FROM COBA WHERE NOMER='1' AND NAMA='AMIN' AND KETERANGAN='JEPARA'))

该查询无效....对我的任何建议,...谢谢......

2 个答案:

答案 0 :(得分:2)

使用唯一约束:

ALTER TABLE COBA ADD CONSTRAINT uni_c UNIQUE (NOMER, NAMA, KETERANGAN)

答案 1 :(得分:1)

如果您不想使用唯一约束,则可以在插入时left join检查nomer是否存在于目标中,如下所示。通过此方法,即使表中已存在记录,也不会出现错误。它将被跳过。

insert into coba
(select s.nomer,s.nama,s.ket from 
    (select 1 as nomer,'AA' as nama,'bb' as ket from dual) s
left join 
    coba t
on s.nomer=t.nomer
    where t.nomer is null
);

我在MySQL中创建了一个小提琴(因为Oracle不工作),但功能相同。正如您在下面的示例中所看到的,nomer = 1未再次插入。

请参阅此处的小提琴演示

http://sqlfiddle.com/#!2/3add2/1