一尘不染

MySql一次更新两个表

mysql

我有两个表需要相同的值以实现非规范化。

这是查询。

第一张桌子

UPDATE Table_One 
SET win = win+1, streak = streak+1, score = score+200 
WHERE userid = 1 AND lid = 1 LIMIT 1

第二张桌子

UPDATE Table_Two 
SET win = win+1, streak = streak+1, score = score+200 
WHERE userid = 1 LIMIT 1

如您所见,两个表之间的唯一区别是它们的名称和两个表没有该字段 lid

无论如何将两个更新合并为一个?


阅读 215

收藏
2020-05-17

共1个答案

一尘不染

如文档中所述,应该可以进行多表更新。

http://dev.mysql.com/doc/refman/5.5/en/update.html

UPDATE Table_One a INNER JOIN Table_Two b ON (a.userid = b.userid)
SET
  a.win = a.win+1, a.streak = a.streak+1, a.score = a.score+200,
  b.win = b.win+1, b.streak = b.streak+1, b.score = b.score+200 
WHERE a.userid = 1 AND a.lid = 1 AND b.userid = 1

注意:多表不支持LIMIT,因此根据具体情况,这可能会引起更多麻烦。

存储过程或事务可能是更好的解决方案。

2020-05-17