6 ответов:
вы можете сделать это с помощью хранимой процедуры, комбинируя
UPDATEоператоров в одной транзакции.
возьмем случай двух таблиц,
BooksиOrders. В случае, если мы увеличиваем количество книг в определенном порядке сOrder.ID = 1002наOrdersтаблица тогда нам также нужно уменьшить общее количество книг, доступных на нашем складе на то же количество вBooksтаблица.UPDATE Books, Orders SET Orders.Quantity=Orders.Quantity+2, Books.InStock=Books.InStock-2 WHERE Books.BookID=Orders.BookID AND Orders.OrderID = 1002;
UPDATE t1 INNER JOIN t2 ON t2.t1_id = t1.id INNER JOIN t3 ON t2.t3_id = t3.id SET t1.a = 'something', t2.b = 42, t3.c = t2.c WHERE t1.a = 'blah';чтобы увидеть, что это будет обновлять, вы можете преобразовать это в инструкцию select, например:
SELECT t2.t1_id, t2.t3_id, t1.a, t2.b, t2.c AS t2_c, t3.c AS t3_c FROM t1 INNER JOIN t2 ON t2.t1_id = t1.id INNER JOIN t3 ON t2.t3_id = t3.id WHERE t1.a = 'blah';
вы также можете сделать это с одним запросом тоже с помощью соединения, как так:
UPDATE table1,table2 SET table1.col=a,table2.col2=b WHERE items.id=month.id;а потом просто отправить этот один запрос, конечно. Вы можете прочитать больше о соединениях здесь:http://dev.mysql.com/doc/refman/5.0/en/join.html. Есть также несколько ограничений для заказа и ограничения на несколько обновлений таблицы вы можете прочитать здесь:http://dev.mysql.com/doc/refman/5.0/en/update.html (просто ctrl+f "join").
когда вы говорите несколько запросов, вы имеете в виду несколько операторов SQL, как в:
UPDATE table1 SET a=b WHERE c; UPDATE table2 SET a=b WHERE d; UPDATE table3 SET a=b WHERE e;или несколько вызовов функции запроса, как в:
mySqlQuery(UPDATE table1 SET a=b WHERE c;) mySqlQuery(UPDATE table2 SET a=b WHERE d;) mySqlQuery(UPDATE table3 SET a=b WHERE e;)первое может быть сделано с помощью одного вызова mySqlQuery если это то, что вы хотели достичь, просто вызовите функцию mySqlQuery следующим образом:
mySqlQuery(UPDATE table1 SET a=b WHERE c; UPDATE table2 SET a=b WHERE d; UPDATE table3 SET a=b WHERE e;)это выполнит все три запроса с одним вызовом mySqlQuery ().
обычно это то, для чего предназначены хранимые процедуры: для реализации нескольких операторов SQL в последовательности. Используя откаты, вы можете гарантировать, что они обрабатываются как одна единица работы, т. е. либо все они выполняются, либо ни один из них, чтобы сохранить согласованность данных.
Comments