有人可以运行一个健全性检查以下查询。我们正在尝试更新数据库,将25000个随机用户移动到新的测试电子邮件版本(将其emp_version更改为“0.6.3”)。我们只想更改当前处于活动状态1且当前emp_version为“0.6.2”的用户。MySQL健康检查
UPDATE email_users
SET emp_version="0.6.3"
WHERE active = 1
AND emp_version="0.6.2"
ORDER BY rand() LIMIT 25000;
有人可以运行一个健全性检查以下查询。我们正在尝试更新数据库,将25000个随机用户移动到新的测试电子邮件版本(将其emp_version更改为“0.6.3”)。我们只想更改当前处于活动状态1且当前emp_version为“0.6.2”的用户。MySQL健康检查
UPDATE email_users
SET emp_version="0.6.3"
WHERE active = 1
AND emp_version="0.6.2"
ORDER BY rand() LIMIT 25000;
单表更新
您可以使用ORDER BY和限制。 检查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)
在多表更新的情况下,一个不能使用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
它应该读取WHERE emp_version =“0.6.2”,但否则它的工作很好。谢谢! – user2694306 2014-10-31 07:07:12
抱歉我的不好,现在纠正:) – 2014-10-31 07:08:05
我看不到这个查询比原来的优势。我错过了什么吗? – Strawberry 2014-10-31 07:46:32
请让我知道确切的错误你在查询中所面临的语法看起来相当不错。 – 2014-10-31 07:28:14
没有错误,它只是一个健全的检查,以确保我不会搞砸生产数据库。 – user2694306 2014-10-31 10:16:04
不要我的,但你的代码是完全正常:) – 2014-11-01 06:01:36