判断数据在数据库是否存在

2018-11-16 11:50:24 +08:00
 jyjsjd

有个导入数据需求,要先判断 id 在数据库是否存在,再决定是报错还是插入。 请教各位如何才能高效地完成?

2620 次点击
所在节点    问与答
16 条回复
zn
2018-11-16 12:06:26 +08:00
根据数据库不同而不同。
有些数据库支持 replace into,这个应该是最稳妥最方便的。
有些只能 select 后再去根据情况插入或者 update
o562dsRcFqYl375i
2018-11-16 17:16:30 +08:00
id 是主键?是的话直接 select,本来就快到飞起,你是有多大数据量?
jyjsjd
2018-11-16 17:39:18 +08:00
@zn replace into 不行,id 是主键,也不好建唯一主键
jyjsjd
2018-11-16 17:39:42 +08:00
@huangzongzhuan 是主键,select 去查被批了
kkkkkrua
2018-11-16 17:47:38 +08:00
是程序搞还是 SQL 语句搞?
springGun
2018-11-16 17:54:03 +08:00
mysql 可以使用 insert ignore into ,根据返回值判断有没有插入成功
so1n
2018-11-16 17:55:29 +08:00
insert ignore
johnniang
2018-11-16 18:50:31 +08:00
@jyjsjd 批量 select 还是每个数据都 select 了?
EchoUtopia
2018-11-16 18:58:23 +08:00
postgres 的话可以 insert into. ..on conflict() do nothing returning. id,然后判断这个 id 是否为空,如果是,表示已存在
FrailLove
2018-11-16 19:03:30 +08:00
merge into
jyjsjd
2018-11-16 20:56:35 +08:00
@springGun id 是自增的,也没有唯一索引
alakey1989
2018-11-16 21:02:57 +08:00
先说下是什么数据库,什么语言
jyjsjd
2018-11-16 21:48:26 +08:00
@alakey1989 mysql,Java
alakey1989
2018-11-16 22:07:05 +08:00
mysql 的话 insert on duplicate key update 这个看下能行不
alakey1989
2018-11-16 22:07:45 +08:00
哦不对,,你不是要更新。。
BigLion
2018-11-16 22:12:43 +08:00
select 1 from table where xxx=yyy

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/508455

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX