跨多个 MySQL 表同时更新
当出于非规范化目的而需要更新相同值的多个表时,执行效率可能会很低每个表的单独更新。幸运的是,MySQL 提供了一种方法,使用多表更新将这些更新合并为单个操作。
考虑以下场景:
<code class="sql">-- Table One Update UPDATE Table_One SET win = win+1, streak = streak+1, score = score+200 WHERE userid = 1 AND lid = 1 LIMIT 1 -- Table Two Update UPDATE Table_Two SET win = win+1, streak = streak+1, score = score+200 WHERE userid = 1 LIMIT 1</code>
在此示例中,两个表需要相同的数据除了表二中缺少“lid”字段之外,值都会更新。为了合并这些更新,我们可以使用多表更新,如下所示:
<code class="sql">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</code>
在此查询中,我们使用“INNER JOIN”语句在“userid”列上连接两个表,确保仅更新匹配的行。 “SET”子句定义两个表的更新值。
需要注意的是,多表更新不支持“LIMIT”子句,因此这可能会更新比预期更多的行。在这种情况下,请考虑使用存储过程或事务来更精细地控制更新。
以上是如何有效地更新多个具有相同值的 MySQL 表?的详细内容。更多信息请关注PHP中文网其他相关文章!