MySQL,用一个查询更新多个表

我有一个函数更新三个表,但我使用三个查询来执行此操作。 我希望使用更方便的方法来进行良好的实践。

如何用一个查询更新MySQL中的多个表?

您可以通过在单个事务中组合UPDATE语句来执行存储过程。

以两张表格“ BooksOrders为例。 在这种情况下,我们增加了Orders表中Order.ID = 1002的特定订单的数量,然后我们还需要在Books表中将相同数量的Books总数减less。

 UPDATE Books, Orders SET Orders.Quantity=Orders.Quantity+2, Books.InStock=Books.InStock-2 WHERE Books.BookID=Orders.BookID AND Orders.OrderID = 1002; 

你也可以用一个查询来做到这一点:

 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”)。

 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.NAME=Table2.NAME WHERE Table1.id=Table2.id ; 

这通常是存储过程的目的:在一个序列中实现多个SQL语句。 使用回滚,可以确保它们被视为一个工作单元,也就是说,它们全部被执行,或者没有一个是保持数据一致的。

当你说多个查询时,你的意思是多个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()调用执行所有三个查询。