V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
jyjsjd
V2EX  ›  问与答

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

  •  
  •   jyjsjd · 2018-11-16 11:50:24 +08:00 · 2664 次点击
    这是一个创建于 2235 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    16 条回复    2018-11-16 22:12:43 +08:00
    zn
        1
    zn  
       2018-11-16 12:06:26 +08:00 via iPhone
    根据数据库不同而不同。
    有些数据库支持 replace into,这个应该是最稳妥最方便的。
    有些只能 select 后再去根据情况插入或者 update
    o562dsRcFqYl375i
        2
    o562dsRcFqYl375i  
       2018-11-16 17:16:30 +08:00
    id 是主键?是的话直接 select,本来就快到飞起,你是有多大数据量?
    jyjsjd
        3
    jyjsjd  
    OP
       2018-11-16 17:39:18 +08:00 via iPhone
    @zn replace into 不行,id 是主键,也不好建唯一主键
    jyjsjd
        4
    jyjsjd  
    OP
       2018-11-16 17:39:42 +08:00 via iPhone
    @huangzongzhuan 是主键,select 去查被批了
    kkkkkrua
        5
    kkkkkrua  
       2018-11-16 17:47:38 +08:00
    是程序搞还是 SQL 语句搞?
    springGun
        6
    springGun  
       2018-11-16 17:54:03 +08:00
    mysql 可以使用 insert ignore into ,根据返回值判断有没有插入成功
    so1n
        7
    so1n  
       2018-11-16 17:55:29 +08:00
    insert ignore
    johnniang
        8
    johnniang  
       2018-11-16 18:50:31 +08:00
    @jyjsjd 批量 select 还是每个数据都 select 了?
    EchoUtopia
        9
    EchoUtopia  
       2018-11-16 18:58:23 +08:00 via Android
    postgres 的话可以 insert into. ..on conflict() do nothing returning. id,然后判断这个 id 是否为空,如果是,表示已存在
    FrailLove
        10
    FrailLove  
       2018-11-16 19:03:30 +08:00 via iPhone
    merge into
    jyjsjd
        11
    jyjsjd  
    OP
       2018-11-16 20:56:35 +08:00 via iPhone
    @springGun id 是自增的,也没有唯一索引
    alakey1989
        12
    alakey1989  
       2018-11-16 21:02:57 +08:00
    先说下是什么数据库,什么语言
    jyjsjd
        13
    jyjsjd  
    OP
       2018-11-16 21:48:26 +08:00 via iPhone
    @alakey1989 mysql,Java
    alakey1989
        14
    alakey1989  
       2018-11-16 22:07:05 +08:00
    mysql 的话 insert on duplicate key update 这个看下能行不
    alakey1989
        15
    alakey1989  
       2018-11-16 22:07:45 +08:00
    哦不对,,你不是要更新。。
    BigLion
        16
    BigLion  
       2018-11-16 22:12:43 +08:00
    select 1 from table where xxx=yyy
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2275 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 16:01 · PVG 00:01 · LAX 08:01 · JFK 11:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.