向数据库里插入大量数据,怎么实现不插入重复的记录
我每次都要向数据库插入大量的数据,可能每次都有好几万条。可是这些记录在数据库里有些存在有些不存在,如果该记录存在再插入肯定会有冲突(数据库和程序会报错)。有没有什么好的方...
我每次都要向数据库插入大量的数据,可能每次都有好几万条。
可是这些记录在数据库里有些存在有些不存在,
如果该记录存在再插入肯定会有冲突(数据库和程序会报错)。
有没有什么好的方法实现插入记录的时候发现有重复记录就“更新”,要不就跳过!
请教各位了!!!!! 展开
可是这些记录在数据库里有些存在有些不存在,
如果该记录存在再插入肯定会有冲突(数据库和程序会报错)。
有没有什么好的方法实现插入记录的时候发现有重复记录就“更新”,要不就跳过!
请教各位了!!!!! 展开
8个回答
展开全部
我给你提供个思路,不要光从sql角度考虑,从java语言提供的异常机智考虑会更简单.因为我在对数据库进行轮询的时候也经常遇到这样的问题.
最好的解决之道就是如果不存在就插入,如果重复,就跳过.
//将插入语句放在循环体中
for(int i=0;i<n;i++){
try{
//............省略具体插入代码
//插入的代码块,如果插入异常,将会发生异常 ,并被catch捕捉,但程序不做任何处理.继续循环下面一条!!所有不存在的数据将会被正常插入.所有插入异常将会被忽略!
}catch(Exception e){
}
}
---这个解决之道就是正常则插入,异常则跳过,满足了你的要求的.呵呵,就是你想要的答案吧.
最好的解决之道就是如果不存在就插入,如果重复,就跳过.
//将插入语句放在循环体中
for(int i=0;i<n;i++){
try{
//............省略具体插入代码
//插入的代码块,如果插入异常,将会发生异常 ,并被catch捕捉,但程序不做任何处理.继续循环下面一条!!所有不存在的数据将会被正常插入.所有插入异常将会被忽略!
}catch(Exception e){
}
}
---这个解决之道就是正常则插入,异常则跳过,满足了你的要求的.呵呵,就是你想要的答案吧.
展开全部
像这种比较复杂的带逻辑的最好用存储过程做
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
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
比如有个索引id
插入的时候可以这样
insert into 表
where id not in(select id from 表)
找出id不在表中的数据插入,OK?
插入的时候可以这样
insert into 表
where id not in(select id from 表)
找出id不在表中的数据插入,OK?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
给ES插入数据之前,每条数据加一列唯一索引,指定这个索引作为ES每个document的_id,直接插入,如果有重复数据会更新。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
将其中一个或几个字段建一个索引,设置索引唯一,并且忽略重复项,这样就可以了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询