«Вставьте, если не существует» - PullRequest
0 голосов
/ 28 марта 2020

Есть ли способ вставить в него, если значения не существуют ни в одной строке? Допустим, у меня есть таблица:

id(auto_increment)|id_user|id_translation
------------------------------------------
39                |5      | 20
-

Пробовал

INSERT IGNORE INTO `usertranslation`(`id_translation`, `id_user`) VALUES ('20','5')
WHERE not EXISTS (
    SELECT * from `usertranslation`
    WHERE `id_translation` = '20' AND
    `id_user` = '5' )

И похоже с заменой, но у меня ничего не работает

Ответы [ 2 ]

1 голос
/ 28 марта 2020

Для предотвращения дублирования в таблице должны использоваться ограничения UNIQUE . Поэтому сначала вам нужно изменить таблицу следующим образом:

ALTER TABLE `usertranslation`
ADD CONSTRAINT `unique_user_transaction` UNIQUE KEY(`id_translation`, `id_user`);

После изменения таблицы вы можете использовать:

INSERT IGNORE INTO `usertranslation`(`id_translation`, `id_user`) VALUES ('20','5');

Обратите внимание INSERT IGNORE предотвратить ошибку при попытке вставить дубликаты, но увеличить также поле автоинкремента.

0 голосов
/ 28 марта 2020

Либо используйте:

INSERT IGNORE INTO `usertranslation`(`id_translation`, `id_user`) VALUES ('20','5')

, который не будет вставлять новую строку (без ошибки), если существуют существующие ограничения, конфликтующие с новой строкой, или INSERT с SELECT и , а не VALUES:

INSERT INTO `usertranslation`(`id_translation`, `id_user`) 
SELECT '20', '5'
WHERE NOT EXISTS (    
  SELECT 1 from `usertranslation`
  WHERE `id_translation` = '20' AND `id_user` = '5' 
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...