Задавайте вопросы, мы ответим
Вы не зашли.
Очень популярная ситуация, когда в таблицу первый раз заносится запись а потом периодически обновляется.
Как реализовать это одним запросом ?
Использовал решения :
REPLACE INTO
и
INSERT ... ON DUPLICATE KEY UPDATE
В принципе дают правильный результат, но само выполнение не совсем практичное, то есть каждый раз с начала выполняется INSERT и в случае DUPLICATE KEY выполняется UPDATE.
Нужно обратное, сначало делать UPDATE и в случае отсутствия записи делать INSERT (и всё одним запросом, не процедурой)
Знаю про функцию ROW_COUNT(), но никак получается собрать запрос.
Неактивен
А чем Вас не устраивает INSERT ON DUPLICATE KEY?
Неактивен
paulus написал:
А чем Вас не устраивает INSERT ON DUPLICATE KEY?
Странно как то, задача кажется по моему очень распространённой. Существует объект который нужно просто сохранить по ID.
Существует таблица в которую при первом сохранении выполняется INSERT, а все последующие сохранения выполняется UPDATE.
INSERT ON DUPLICATE KEY - Выполняет лишнюю работу, каждый раз инсертит, падает и апдетит , а мне нужно наоборот.
Странно почему этот вопрос никакого не интересует, такая задача по моему встречается почти в каждом приложении.
Неактивен
Вы как-то неверно себе трактуете поведение: «инсертит, падает и апдейтит».
MySQL ищет строку по ключу. Если находит — обновляет, если не находит —
добавляет. Что конкретно Вам не нравится — я не понимаю. Это единственный
разумный способ сделать то, что Вам нужно. При этом он является оптимальным.
Неактивен
Возможно я ошибаюсь, но мне кажется что
"REPLACE INTO" и "INSERT ... ON DUPLICATE KEY UPDATE" работают по принципу TRY - CATCH
То есть выполняются именно два запроса.
TRY :
INSERT ->
Error Code : 1062
Duplicate entry '2' for key 'PRIMARY'
CATCH:
UPDATE
Неактивен