如何使用Oracle防止插入查询中的重复行?

时间:2009-10-31 18:17:19

标签: sql oracle

我在Oracle中有一个具有主键(id)的表A.我需要在此表中插入数据。

如何防止重复行?

3 个答案:

答案 0 :(得分:5)

如果id列被标记为PK,您将无法插入重复的密钥,服务器将抛出异常。

如果您要使用不同的密钥插入重复数据 - 这是您需要处理的逻辑(例如对实际数据设置唯一约束)或在插入之前进行检查。

答案 1 :(得分:1)

如果您的意思是您拥有相同的行(除了主键)并且您想知道如何删除它们,那么请执行以下操作:

select col2, col3, ...coln, min(id) from A
group by col2, col3, ...coln

(即,选择除id之外的所有列。)

要获取唯一实例

delete from A where id not in
(select min(id) from A
group by col2, col3, ...coln) as x

删除除唯一实例(即重复项)之外的所有行。

答案 2 :(得分:0)

首先,您将在此表上创建一个具有序列的唯一ID。然后当您插入到该表时,在insert语句中可以使用:

 tableName_sn.nextval

在如下声明中:

inserti into tableName (id) values (tableName_sn.nextval)

获取序列中的下一个唯一键。然后,如果您使用此密钥,您将保证它是唯一的。但是,需要注意的是,如果有人刚刚输入了不使用nextval函数的密钥,那么 会导致主键违规。