在插入之前插入检查重复的语句

T10*_*000 3 mysql sql insert duplicates

我需要进行插入,但仅当相似的记录不存在时才会出现
例如:

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

但要检查另一条记录中是否有相同的"主题"和"文字":

  1. 不插入任何东西
  2. 更新'时间'和'user_id'

我需要两种情况的SQL,因为我现在不确定我将要使用什么.
提前致谢!

Rob*_*lin 14

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)
Run Code Online (Sandbox Code Playgroud)

将相关列设置为索引UNIQUE.

这将插入一行,但如果主题或文本(或两者)已经存在,则使用给定time和更新现有行user_id


Mat*_*lie 6

首先,您可以进行更新。如果记录不存在,则什么都不会发生...

UPDATE
  requests
SET
  user_id = 56,
  time = 6516516
WHERE
  subject = 'test'
  AND text = 'test 1234'
Run Code Online (Sandbox Code Playgroud)

然后您可以在 INSERT 中使用 SELECT 而不是 VALUES。如果记录已经存在,则不会插入任何内容...

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')
Run Code Online (Sandbox Code Playgroud)