“Insert if not exists” statement in SQLite

后端 未结 4 916
借酒劲吻你
借酒劲吻你 2020-11-22 12:14

I have an SQLite database. I am trying to insert values (users_id, lessoninfo_id) in table bookmarks, only if both do not exist before

相关标签:
4条回答
  • 2020-11-22 12:42

    If you never want to have duplicates, you should declare this as a table constraint:

    CREATE TABLE bookmarks(
        users_id INTEGER,
        lessoninfo_id INTEGER,
        UNIQUE(users_id, lessoninfo_id)
    );
    

    (A primary key over both columns would have the same effect.)

    It is then possible to tell the database that you want to silently ignore records that would violate such a constraint:

    INSERT OR IGNORE INTO bookmarks(users_id, lessoninfo_id) VALUES(123, 456)
    
    0 讨论(0)
  • 2020-11-22 12:45
    insert into bookmarks (users_id, lessoninfo_id)
    
    select 1, 167
    EXCEPT
    select user_id, lessoninfo_id
    from bookmarks
    where user_id=1
    and lessoninfo_id=167;
    

    This is the fastest way.

    For some other SQL engines, you can use a Dummy table containing 1 record. e.g:

    select 1, 167 from ONE_RECORD_DUMMY_TABLE
    
    0 讨论(0)
  • 2020-11-22 12:48

    For a unique column, use this:

    INSERT OR REPLACE INTO table () values();
    

    For more information, see: sqlite.org/lang_insert

    0 讨论(0)
  • 2020-11-22 12:49

    If you have a table called memos that has two columns id and text you should be able to do like this:

    INSERT INTO memos(id,text) 
    SELECT 5, 'text to insert' 
    WHERE NOT EXISTS(SELECT 1 FROM memos WHERE id = 5 AND text = 'text to insert');
    

    If a record already contains a row where text is equal to 'text to insert' and id is equal to 5, then the insert operation will be ignored.

    I don't know if this will work for your particular query, but perhaps it give you a hint on how to proceed.

    I would advice that you instead design your table so that no duplicates are allowed as explained in @CLs answer below.

    0 讨论(0)
提交回复
热议问题