SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 16.03.2010 15:38:14

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

INSERT IF NOT EXISTS в MySQL

Ребята, доброго здравия!

Подскажите, пожалуйста, как правильно реализовать вставку в таблицу с одновременной проверкой на отсутствие в таблице вставляемых в нее данных?

Таблица:


mysql> SHOW COLUMNS FROM words;
+---------+---------------------+------+-----+---------+----------------+
| Field   | Type                | Null | Key | Default | Extra          |
+---------+---------------------+------+-----+---------+----------------+
| word_id | int(11) unsigned    | NO   | PRI | NULL    | auto_increment |
| lng_id  | tinyint(4) unsigned | YES  |     | NULL    |                |
| word    | varchar(64)         | NO   | MUL |         |                |
+---------+---------------------+------+-----+---------+----------------+
 
Уже пробовал следующие варианты:

REPLACE INTO `words` SET `word` = 'dog', `lng_id`= 2;
INSERT INTO `words` (`lng_id`, `word`) VALUES (2, 'dog') ON DUPLICATE KEY UPDATE `lng_id`= lng_id;
 
Все не то, каждый раз добавляются дублирующие строки.
С вариантом:

insert into words (lng_id, word) values(2, 'dog') where not exists (select word_id from words where word="dog");
 
пока не смог разобраться, не работает...

Отредактированно FiMko (16.03.2010 15:39:34)

Неактивен

 

#2 16.03.2010 15:57:39

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Re: INSERT IF NOT EXISTS в MySQL

Кажется, начинаю прозревать, что заморочка в word_id, который я не даю при запросе, но что получается - я должен каждый раз еще и word_id искать...?
К тому же:


mysql> REPLACE INTO words(word_id, lng_id, word) VALUES ((
    select word_id from words where word="dog"
) , 2, 'dog');
ERROR 1093 (HY000): You can't specify target table 'words' for update in FROM clause

Отредактированно FiMko (16.03.2010 16:22:33)

Неактивен

 

#3 16.03.2010 16:43:19

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: INSERT IF NOT EXISTS в MySQL

А как Вы определяете «дублирующие»? Если нужно, чтобы были уникальные
слова, то нужен уникальный индекс по этому полю.

Неактивен

 

#4 16.03.2010 16:46:33

FiMko
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 18.09.2009
Сообщений: 198

Re: INSERT IF NOT EXISTS в MySQL

paulus написал:

А как Вы определяете «дублирующие»? Если нужно, чтобы были уникальные
слова, то нужен уникальный индекс по этому полю.

big_smilebig_smilebig_smile а я то убивался! Объявил это поле как UNIQUE, и вы не поверите - заработало big_smile! Спасибо!!!

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson