MySql 一次更新两个表

标签 mysql sql-update

我有两个表需要完全相同的值来进行非规范化。

这是查询。

第一张 table

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

第二张 table

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

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

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

最佳答案

如文档中所述,多表更新应该是可能的。

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,因此这可能会导致更多问题,具体取决于细节。

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

关于MySql 一次更新两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8765490/

相关文章:

MySql 为每个 id 按天查找最大项目

php - codeigniter batch_update-插入确认

mysql - phpmyadmin 更新查询使用 3 个表给出错误

sql - 将多个行值更新为同一行和不同列

php 表单输入验证

MySQL 错误代码 : 1264 Out of range value for column 'count' at row 1

php - 无法输出数据库中与两个选择选项相关的行

sql - PL/pgSQL 函数在 pgAdmin 之外无法正确运行

sql-server - 原子更新声明?

sql-update - Redshift UPDATE太慢了