MySQL健全性检查
有人可以对下面的查询运行一个健全性检查吗。我们正在尝试更新数据库,将25000名随机用户迁移到新的测试电子邮件版本(将他们的emp_版本更改为“0.6.3”)。我们只想更改当前活动状态为1且当前emp_版本为“0.6.2”的用户MySQL健全性检查,mysql,sql,Mysql,Sql,有人可以对下面的查询运行一个健全性检查吗。我们正在尝试更新数据库,将25000名随机用户迁移到新的测试电子邮件版本(将他们的emp_版本更改为“0.6.3”)。我们只想更改当前活动状态为1且当前emp_版本为“0.6.2”的用户 单表更新 您可以使用orderby和LIMIT。 检查 多表更新(使用内部联接) 在多表更新的情况下,不能在更新查询中使用ORDERBY、LIMIT,为了使用它们,我们使用子查询获得25000个所需的元组,然后对同一个表进行内部联接。我们无法更新子查询表,因为它实际上不
单表更新 您可以使用orderby和LIMIT。 检查 多表更新(使用内部联接) 在多表更新的情况下,不能在更新查询中使用ORDERBY、LIMIT,为了使用它们,我们使用子查询获得25000个所需的元组,然后对同一个表进行内部联接。我们无法更新子查询表,因为它实际上不存在于数据库中 尝试下面的查询
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
它应该读到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;
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