向数据库里插入大量数据,怎么实现不插入重复的记录

我每次都要向数据库插入大量的数据,可能每次都有好几万条。可是这些记录在数据库里有些存在有些不存在,如果该记录存在再插入肯定会有冲突(数据库和程序会报错)。有没有什么好的方... 我每次都要向数据库插入大量的数据,可能每次都有好几万条。

可是这些记录在数据库里有些存在有些不存在,

如果该记录存在再插入肯定会有冲突(数据库和程序会报错)。

有没有什么好的方法实现插入记录的时候发现有重复记录就“更新”,要不就跳过!

请教各位了!!!!!
展开
 我来答
ukong_
2008-01-26 · TA获得超过396个赞
知道小有建树答主
回答量:253
采纳率:0%
帮助的人:0
展开全部
我给你提供个思路,不要光从sql角度考虑,从java语言提供的异常机智考虑会更简单.因为我在对数据库进行轮询的时候也经常遇到这样的问题.
最好的解决之道就是如果不存在就插入,如果重复,就跳过.
//将插入语句放在循环体中
for(int i=0;i<n;i++){
try{
//............省略具体插入代码
//插入的代码块,如果插入异常,将会发生异常 ,并被catch捕捉,但程序不做任何处理.继续循环下面一条!!所有不存在的数据将会被正常插入.所有插入异常将会被忽略!
}catch(Exception e){

}
}
---这个解决之道就是正常则插入,异常则跳过,满足了你的要求的.呵呵,就是你想要的答案吧.
灵猫的羽毛
2008-01-24 · TA获得超过167个赞
知道小有建树答主
回答量:369
采纳率:0%
帮助的人:253万
展开全部
像这种比较复杂的带逻辑的最好用存储过程做

create procedure altertable
@col1 varchar(20)
,@col2 datetime
,@col3 varchar(255)
......
--所有要插入的字段类型也最好和表一样,假设通过col1 col2就能判断重复
AS
declare @exec_temp int
set @exec_temp=exec ('select count(*) from 表名 where 字段1=@col1 and 字段2=@col2')
--如果col1 col2还不能判断就加col3 col4...

IF (@exec_temp > 0)
begin
--什么都不做,或者exec('update set..')
end
else
begin
exec('insert into 表 values(@col1,@col2.....)')
end
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yizusong
2008-01-24 · TA获得超过3045个赞
知道大有可为答主
回答量:4516
采纳率:0%
帮助的人:4489万
展开全部
比如有个索引id

插入的时候可以这样

insert into 表
where id not in(select id from 表)

找出id不在表中的数据插入,OK?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
牧羊者的故事
2017-12-26
知道答主
回答量:1
采纳率:0%
帮助的人:920
展开全部
给ES插入数据之前,每条数据加一列唯一索引,指定这个索引作为ES每个document的_id,直接插入,如果有重复数据会更新。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
silencesword
2008-01-24 · TA获得超过394个赞
知道小有建树答主
回答量:338
采纳率:0%
帮助的人:156万
展开全部
将其中一个或几个字段建一个索引,设置索引唯一,并且忽略重复项,这样就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(6)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式