Insert statement that checks for duplicate before insert

后端 未结 6 1870
一个人的身影
一个人的身影 2020-12-17 05:00

I need to make a insert but only if similar record don\'t exists
for example:

INSERT INTO requests (\'user_id\',\'subject\',\'text\',\'time\') V

相关标签:
6条回答
  • 2020-12-17 05:11

    First, you can do the update. If the record doesn't exist, nothing will happen...

    UPDATE
      requests
    SET
      user_id = 56,
      time = 6516516
    WHERE
      subject = 'test'
      AND text = 'test 1234'
    

    Then you can use SELECT instead of VALUES in the INSERT. If the record already exists, nothing will be inserted...

    INSERT INTO
      requests (
        user_id,
        subject,
        text,
        time
      )
    SELECT
      56,
      'test',
      'test 1234',
      6516516
    WHERE
      NOT EXISTS (SELECT * FROM requests WHERE subject = 'test' AND text = 'test 1234')
    
    0 讨论(0)
  • 2020-12-17 05:16
    INSERT INTO requests ('user_id','subject','text','time') 
    VALUES (56,'test','test 1234',6516516)
    ON DUPLICATE KEY UPDATE time = VALUES(time), user_id = VALUES(user_id)
    

    Have the relevant columns set to index UNIQUE.

    This will insert a row, but if subject or text (or both) already exist, you instead update the existing row with given time and user_id

    0 讨论(0)
  • 2020-12-17 05:16

    Replace your query from

    INSERT INTO requests ('user_id','subject','text','time') VALUES (56,'test','test 1234',6516516)

    To,

    REPLACE INTO requests ('user_id','subject','text','time') VALUES (56,'test','test 1234',6516516)

    This will add a small delay to the execution, but it is more efficient than any other method

    0 讨论(0)
  • 2020-12-17 05:24

    You can use IGNORE command

    For example, use like this

    INSERT IGNORE INTO requests ('user_id','subject','text','time') VALUES (56,'test','test 1234',6516516)
    

    instead of,

    INSERT INTO requests ('user_id','subject','text','time') VALUES (56,'test','test 1234',6516516)
    
    0 讨论(0)
  • 2020-12-17 05:31
    IF NOT EXISTS (SELECT user_id, text from users where user_id = @user_id AND text = @text) BEGIN
       INSERT INTO users ....
    ELSE
       UPDATE users SET xyz=uvw where user_id = @user_id AND text = @text
    END
    
    0 讨论(0)
  • 2020-12-17 05:34

    Look at the REPLACE mysql statement?

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