MySQL健全性检查

时间:2014-10-31 06:46:59

标签: mysql sql

有人可以对以下查询进行健全性检查。我们正在尝试更新我们的数据库,以便将25000个随机用户移动到新的测试电子邮件版本(将他们的emp_version更改为" 0.6.3")。我们只想更改当前活动状态为1且当前emp_version为" 0.6.2"的用户。

UPDATE email_users
SET emp_version="0.6.3" 
WHERE active = 1 
AND emp_version="0.6.2" 
ORDER BY rand() LIMIT 25000;

1 个答案:

答案 0 :(得分:2)

单一表格更新

您可以使用ORDER BY和LIMIT。 查看http://dev.mysql.com/doc/refman/5.7/en/update.html

UPDATE email_users
SET emp_version="0.6.3" 
WHERE active = 1 
AND emp_version="0.6.2" 
ORDER BY rand() LIMIT 25000;

多表更新(使用INNER JOIN)

如果是多表更新,则无法在UPDATE查询中使用ORDER BY,LIMIT,以便使用它们我们使用子查询来获取25000个所需元组,然后使用相同的表进行INNER JOIN。我们无法更新子查询表,因为它实际上并不存在于数据库中。

尝试以下查询

UPDATE email_users eu INNER JOIN 
      (SELECT * FROM email_users 
      WHERE emp_version="0.6.2" 
      AND active = 1  
      ORDER BY rand() 
      LIMIT 25000) AS neu
SET eu.emp_version="0.6.3" 
WHERE eu.id = neu.id