Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MySQL > Два апдейта зависящие друг от друга


Автор: Plavozont 16.12.2011, 12:03
Мне нужно выполнить два оператора UPDATE, если не сработал первый - не выполнять второй, если не сработал второй - не выполнять первый. Как это сделать ? Запросы являются параметрами функции, поэтому не срабатывать они будут из-за синтаксической ошибки или неправильных названий таблиц/полей как правило.

Автор: sir_nuf_nuf 16.12.2011, 13:50
Не выполняйте их вообще.
Все верно - ни один не работает - ни один не запускается.

Если серьезно - у вас противоречие в условии.
Нельзя узнать сработал ли запрос пока его не запустишь.

Автор: Akina 16.12.2011, 14:09
Оберни их в одну транзакцию.

Автор: Plavozont 16.12.2011, 15:39
Цитата

Оберни их в одну транзакцию.


Таблицы в основном MyISAM, не пойдёт...
Есть какой-то способ помимо транзакций, для таблиц не поддерживающих транзакции http://mysql.ru/docs/man/ANSI_diff_Transactions.html в котором мало примеров и я ничё не понял. Может быть также есть способ проверить обречён ли запрос на провал ?

Автор: Akina 16.12.2011, 15:43
Цитата(Plavozont @  16.12.2011,  16:39 Найти цитируемый пост)
Есть какой-то способ помимо транзакций, для таблиц не поддерживающих транзакции 

Угу... бэкап перед запросом и восстановление из него, если ошибка. Устроит?

Цитата(Plavozont @  16.12.2011,  16:39 Найти цитируемый пост)
Может быть также есть способ проверить обречён ли запрос на провал ?

Распечатать его и сходить к бабке-гадалке.

Автор: solenko 16.12.2011, 17:25
Просто проверить синтаксис можно, например, выполнив explain (если он работает для update)

Автор: Plavozont 16.12.2011, 19:17
explain не работает для update

Цитата

Распечатать его и сходить к бабке-гадалке.


А вы если ничего умного предложить не можете то и не умничайте 

Автор: Akina 16.12.2011, 20:41
Plavozont, Вы желаете сделать то, что В Ваших конкретных условиях сделать нельзя. И тем не менее упорствуете... "А может, всё-таки можно, мне же очень надо!" ... не тот случай.
Перейдите на транзакционный движок. Это гарантирует решение поставленной задачи.

Или, если устроит, перейдите на полное триггерное журналирование изменений - правда, оно потребует организации монопольного доступа и блокировки всей БД по записи. Да и ручной откат изменений - та ещё задачка.

Автор: Plavozont 17.12.2011, 10:08
Akina, большое спасибо, жаль что такой облом. Казалось бы такая банальная штука как проверка синтаксиса / правильности названий таблиц/полей и не предоставлена во власть пользователя.

Автор: Akina 17.12.2011, 21:33
Цитата(Plavozont @  17.12.2011,  11:08 Найти цитируемый пост)
Казалось бы такая банальная штука как проверка синтаксиса / правильности названий таблиц/полей и не предоставлена во власть пользователя. 

Синтаксический контроль текста запроса как раз провести можно - правда, не для всех типов запросов... это делает explain. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)