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

时间:2011-11-29 14:05:32

标签: mysql sql insert duplicates

我需要进行插入,但仅在相似记录不存在的情况下才能进行插入 例如:

  

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

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

  1. 没有插入任何内容
  2. 更新'time'和'user_id'
  3. 我需要两种情况的SQL,因为我现在不确定我将要使用的是什么 提前谢谢!

6 个答案:

答案 0 :(得分: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)

将相关列设置为索引UNIQUE。

这将插入一行,但如果主题或文本(或两者)已经存在,则改为使用给定timeuser_id

更新现有行

答案 1 :(得分:4)

首先,您可以进行更新。如果记录不存在,则不会发生任何事情......

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

然后您可以在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')

答案 2 :(得分:2)

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

答案 3 :(得分:1)

您可以使用IGNORE命令

例如,像这样使用

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

代替

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

答案 4 :(得分:1)

替换您的查询

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

收件人

REPLACE INTO请求(“ user_id”,“主题”,“文本”,“时间”)的值(56,“ test”,“ test 1234”,6516516)

这会给执行增加一点延迟,但是比其他任何方法都有效

答案 5 :(得分:0)

查看REPLACE mysql语句?