Оператор вставки, который проверяет наличие дубликатов перед вставкой - PullRequest
3 голосов
/ 29 ноября 2011

Мне нужно сделать вставку, но только если подобная запись не существует
, например:

INSERT INTO запросы ('user_id', 'subject', 'text', 'time ') VALUES (56,' test ',' test 1234 ', 6516516)

, но чтобы проверить, есть ли такие же «субъект» и «текст» в другой записи:

  1. ничего не вставлять
  2. обновить 'time' и 'user_id'

Мне нужен sql для обоих случаев, потому что в данный момент я не уверен, что ябуду использовать.
Заранее спасибо!

Ответы [ 5 ]

14 голосов
/ 29 ноября 2011
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.

Это вставит строку, но если тема или текст (или оба) уже существуют, вместо этого вы обновите существующую строку с данными time и user_id

4 голосов
/ 29 ноября 2011

Во-первых, вы можете сделать обновление.Если запись не существует, ничего не произойдет ...

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

Тогда вы можете использовать SELECT вместо VALUES во INSERT.Если запись уже существует, ничего не будет вставлено ...

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 голосов
/ 29 ноября 2011
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
1 голос
/ 28 июня 2018

Вы можете использовать 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)
0 голосов
/ 29 ноября 2011

Посмотрите на оператор REPLACE mysql?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...