У меня есть функция, которая обновляет три таблицы, но я использую для этого три запроса. Я хочу использовать более удобный подход для хорошей практики.
Как я могу обновить несколько таблиц в MySQL с помощью одного запроса?
mysql
sql
sql-update
Адамский
источник
источник
Ответы:
Возьмем случай двух таблиц,
Books
иOrders
. В случае, если мы увеличиваем количество книг в определенном порядке с помощьюOrder.ID = 1002
inOrders
table, нам также необходимо уменьшить это общее количество книг, доступных на нашем складе, на такое же количество вBooks
таблице.источник
Чтобы увидеть, что это будет обновляться, вы можете преобразовать это в оператор выбора, например:
Пример с использованием тех же таблиц, что и другой ответ:
РЕДАКТИРОВАТЬ:
Ради интереса давайте добавим что-нибудь поинтереснее.
Допустим, у вас есть таблица из
books
и таблица изauthors
. У васbooks
естьauthor_id
. Но когда база данных была изначально создана, никакие ограничения внешнего ключа не были установлены, а позже ошибка во внешнем коде привела к добавлению некоторых книг с недопустимымиauthor_id
s. Как администратор баз данных вы не хотите проходить через все это,books
чтобы проверить, чтоauthor_id
должно быть, поэтому принимается решение, что сборщики данных исправятbooks
указатель вправоauthors
. Но существует слишком много книг, чтобы просмотреть каждую из них, и, допустим, вы знаете, что те, уauthor_id
которых есть реальная ценность,author
являются правильными. Это просто несуществующиеauthor_id
s, которые недействительны. Уже существует интерфейс, позволяющий пользователям обновлять сведения о книге, и разработчики не хотят менять его только для этой проблемы. Но существующий интерфейс делает этоINNER JOIN authors
, поэтому все книги с недопустимыми авторами исключаются.Вы можете сделать следующее: вставить фиктивную запись об авторе, например «Неизвестный автор». Затем обновите
author_id
все плохие записи, чтобы они указывали на Неизвестного автора. Затем сборщики данных могут искать все книги с автором, установленным на «Неизвестный автор», искать правильного автора и исправлять их.Как обновить все плохие записи, чтобы они указывали на Неизвестного автора? Вот так (при условии, что неизвестный автор
author_id
- 99999):Вышесказанное также обновит
books
что естьNULL
author_id
неизвестный автор. Если вы этого не хотите, вы, конечно, можете добавитьAND books.author_id IS NOT NULL
.источник
Вы также можете сделать это с одним запросом, используя такое соединение:
И, конечно, просто отправьте этот запрос. Вы можете узнать больше о присоединениях здесь: http://dev.mysql.com/doc/refman/5.0/en/join.html . Также существует пара ограничений для упорядочивания и ограничения нескольких обновлений таблиц, о которых вы можете прочитать здесь: http://dev.mysql.com/doc/refman/5.0/en/update.html (просто ctrl + f «присоединиться»).
источник
Обычно для этого нужны хранимые процедуры: для реализации нескольких операторов SQL в последовательности. Используя откаты, вы можете гарантировать, что они обрабатываются как одна единица работы, то есть либо все они выполняются, либо ни одна из них не выполняется, чтобы данные были согласованными.
источник
Когда вы говорите несколько запросов, вы имеете в виду несколько операторов SQL, например:
Или несколько вызовов функции запроса, как в:
Первое можно сделать с помощью одного вызова mySqlQuery, если это то, чего вы хотели достичь, просто вызовите функцию mySqlQuery следующим образом:
Это выполнит все три запроса с помощью одного вызова mySqlQuery ().
источник