SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 09.08.2011 17:30:31

gif-t
Завсегдатай
Зарегистрирован: 08.08.2011
Сообщений: 74

update и insert в случае если update не выполнился

Есть запрос update xxx where `0` = '1' and `1` = '1'
Иногда строки, удолетворяющей условию `0` = '1' and `1` = '1'  в таблице нет.
Мне нужно в запросе указать что в таком случае нужно предварительно её создать (выполнить INSERT INTO table (`0`, `1`) VALUES ('1', '1') ) и после выполнить update, подскажите как сделать
Спасибо

Отредактированно gif-t (09.08.2011 19:50:22)

Неактивен

 

#2 09.08.2011 20:25:52

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: update и insert в случае если update не выполнился

Указать такое в запросе нельзя.
Можно сделать несколько запросов. Например, сначала проверяете есть ли строки, удовлетворяющие условию, затем обновляете или добавляете в зависимости от результата.

P.S. Почему в случае отсутствия нужно строки вы хотите её сначала добавить, потом обновить? Что мешает сразу добавлять с нужными значениями?

Неактивен

 

#3 09.08.2011 22:33:27

gif-t
Завсегдатай
Зарегистрирован: 08.08.2011
Сообщений: 74

Re: update и insert в случае если update не выполнился

Нужно количество запросов сократить до минимума, т.к. приложение отправляет их в огромном количестве и становится очень критична задержка по времени, т.к. каждый запрос тормозит программу. Поэтому очень нежелательно делать несколько запросов.

Насчёт сразу добавлять с нужными значениями - это, как я понял, нужно использовать ON DUPLICATE KEY и в одном запросе заполнять insert и update сразу и полностью. Т.е. отправляемые данные дублируются, отправляемая строка в 2 раза длиннее. В целом это усложнит код... я полагаю для такой распространенной задачи в MySQL наверняка что-то предусмотрено? Какой-нибудь INSUPD... smile Хочеться написать всё сразу правильно, без велосипедов

Отредактированно gif-t (09.08.2011 22:36:15)

Неактивен

 

#4 09.08.2011 22:51:34

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: update и insert в случае если update не выполнился

gif-t написал:

Нужно количество запросов сократить до минимума, т.к. приложение отправляет их в огромном количестве и становится очень критична задержка по времени, т.к. каждый запрос тормозит программу. Поэтому очень нежелательно делать несколько запросов.

Как уже сказано ранее -одним запросом не получиться.


gif-t написал:

Насчёт сразу добавлять с нужными значениями - это, как я понял, нужно использовать ON DUPLICATE KEY

Зачем? Вы сначала хотите добавить строку с определенными значениями, а потом изменить эту строку, т.е. конечный вариант вам известен заранее. Что мешает при инсерте сразу указать нужные данные. Естественно речь идет о случае, когда искомая строка отсутствует.



gif-t написал:

я полагаю для такой распространенной задачи в MySQL наверняка что-то предусмотрено? Какой-нибудь INSUPD... smile

Не сказал бы, что задача распространена. А для чего это вам нужно?
INSUPD отсутствует smile  http://dev.mysql.com/doc/refman/5.1/en/ … ation.html

Неактивен

 

#5 09.08.2011 23:43:13

gif-t
Завсегдатай
Зарегистрирован: 08.08.2011
Сообщений: 74

Re: update и insert в случае если update не выполнился

Вот я нашел такой велосипед:
INSERT INTO `subscription` (`email`, `id_language`, `id_currency`)
VALUES
('1','aaa','bbb'),
('2','ccc','ddd'),
('3','eee','fff')
ON DUPLICATE KEY UPDATE
`id_language`=VALUES(`id_language`),
`id_currency`=VALUES(`id_currency`)
Но он мне всеравно не катит,... спасибо за ответ, буду пытаться решить эту проблему архитектуре приложения

Отредактированно gif-t (09.08.2011 23:44:16)

Неактивен

 

#6 06.01.2012 14:17:55

YAAP
Завсегдатай
Зарегистрирован: 17.02.2010
Сообщений: 31

Re: update и insert в случае если update не выполнился

Простите за некропост, но я таки не понял smile
Что мешает сделать
1) SELECT  по условиям (который должен быть шустрый и на производительность не влиять, т.е. его как доп запрос можно опустить)
2) INSERT \ UPDATE  в зависимости от результатов 1) ??

Неактивен

 

#7 06.01.2012 20:19:32

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: update и insert в случае если update не выполнился

То что select обязательно будет шустрый - неочевидно, но именно так и делают.

Неактивен

 

Board footer

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