更新MYSQL版本5.1.11中表的前5000行的列

时间:2011-10-08 14:28:21

标签: mysql limit sql-update

我有一种情况需要批量更新表中列的某些值(即前5000行)。

所以我写了一个查询

update clientdetails set lastupdateddate=now where id in (Select id from clientdetails limit 1,5000);

由于此版本的MYSQL不支持Limit 1,5000,因此提示错误。 那么还有其他方法吗?

2 个答案:

答案 0 :(得分:3)

难道你不能这样做:

update clientdetails set lastupdateddate=now where <your where clause> 
limit <desired limit>;

答案 1 :(得分:2)

MySQL在UPDATE和子查询方面存在一些问题。

SELECT * FROM table1 WHERE foo IN (SELECT foo FROM table2 LIMIT 50)

是不可能的。但以下是:

SELECT * 
FROM table1 t
JOIN (SELECT foo FROM table2 LIMIT 50) as tmp
ON tmp.foo = t.foo;

我相信这个“​​(查询)作为表”的东西被称为“虚拟临时视图”(但我可能在这里错了......)

您遇到的第二个问题是您无法使用当前正在阅读的表格。

但是(正如Griwes指出的那样)UPDATE知道一个限制:

UPDATE clientdetails 
SET lastupdateddate = NOW() 
ORDER BY id
LIMIT 0, 5000;

应该有效。确保你在那里有ORDER BY,否则你可能会两次更新某些行,而有些行则永远不会。