我在Oracle中有一个具有主键(id)的表A.我需要在此表中插入数据。
如何防止重复行?
答案 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函数的密钥,那么 会导致主键违规。