Insert statement that checks for duplicate before

2020-02-11 06:58发布

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

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

but to check if there are same 'subject' and 'text' in another record to:

  1. not insert anything
  2. update 'time' and 'user_id'

I need sql for both cases because I'm no sure at this moment what I'm going to use.
Thanks in advance!

5条回答
仙女界的扛把子
2楼-- · 2020-02-11 07:13

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')
查看更多
放我归山
3楼-- · 2020-02-11 07:19

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)
查看更多
迷人小祖宗
4楼-- · 2020-02-11 07:27
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
查看更多
Explosion°爆炸
5楼-- · 2020-02-11 07:31

Look at the REPLACE mysql statement?

查看更多
何必那么认真
6楼-- · 2020-02-11 07:33
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

查看更多
登录 后发表回答