SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 21.05.2011 13:01:16

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

INSERT IF NOT EXIST

Очень популярная ситуация, когда в таблицу первый раз заносится запись а потом периодически обновляется.

Как реализовать это одним запросом ?

Использовал решения  :
REPLACE INTO
и
INSERT ... ON DUPLICATE KEY UPDATE

В принципе дают правильный результат, но само выполнение не совсем практичное, то есть каждый раз с начала выполняется  INSERT и в случае DUPLICATE KEY выполняется UPDATE.

Нужно обратное, сначало делать UPDATE и в случае отсутствия записи делать INSERT (и всё одним запросом, не процедурой)

Знаю про функцию ROW_COUNT(), но никак получается собрать запрос.

Неактивен

 

#2 21.05.2011 19:29:08

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

Re: INSERT IF NOT EXIST

А чем Вас не устраивает INSERT ON DUPLICATE KEY?

Неактивен

 

#3 21.05.2011 23:41:21

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: INSERT IF NOT EXIST

paulus написал:

А чем Вас не устраивает INSERT ON DUPLICATE KEY?

Странно как то, задача кажется по моему очень распространённой. Существует объект который нужно просто сохранить по ID.
Существует таблица в которую при первом сохранении выполняется INSERT, а все последующие сохранения выполняется UPDATE.

INSERT ON DUPLICATE KEY - Выполняет лишнюю работу, каждый раз инсертит, падает и апдетит , а мне нужно наоборот. 

Странно почему этот вопрос никакого не интересует, такая задача по моему встречается почти в каждом приложении.

Неактивен

 

#4 21.05.2011 23:50:53

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

Re: INSERT IF NOT EXIST

Вы как-то неверно себе трактуете поведение: «инсертит, падает и апдейтит».
MySQL ищет строку по ключу. Если находит — обновляет, если не находит —
добавляет. Что конкретно Вам не нравится — я не понимаю. Это единственный
разумный способ сделать то, что Вам нужно. При этом он является оптимальным.

Неактивен

 

#5 22.05.2011 00:12:10

evgeny
Гуру
Зарегистрирован: 04.05.2009
Сообщений: 335

Re: INSERT IF NOT EXIST

Возможно я ошибаюсь, но мне кажется что
"REPLACE INTO" и "INSERT ... ON DUPLICATE KEY UPDATE" работают по принципу TRY - CATCH

То есть выполняются именно два запроса.

TRY :
INSERT ->
Error Code : 1062
Duplicate entry '2' for key 'PRIMARY'

CATCH:
UPDATE

Неактивен

 

Board footer

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