MySQL更新CASE WHEN / THEN / ELSE

我正在尝试使用CLI脚本更新一个大型MyISAM表(2500万条logging)。 表格没有被其他东西locking/使用。

我想,而不是做每个logging单个UPDATE查询,我不如利用CASEfunction。

id字段是主要的。 我怀疑下面的查询应该花费毫秒。

 UPDATE `table` SET `uid` = CASE WHEN id = 1 THEN 2952 WHEN id = 2 THEN 4925 WHEN id = 3 THEN 1592 END 

瞧,查询使CPU不能完成。

然后,令我惊讶的是,我发现查询正在更新所有2500万行,在我没有指定的行上放置NULL。

这是什么目的? 每次执行此查询时,是否可以对特定行进行MASS更新而不更新2500万行? 或者我必须做个别的更新,然后提交?

尝试这个

 UPDATE `table` SET `uid` = CASE WHEN id = 1 THEN 2952 WHEN id = 2 THEN 4925 WHEN id = 3 THEN 1592 ELSE `uid` END WHERE id in (1,2,3) 

更简单的是:

 UPDATE `table` SET uid = ELT(id, 2952, 4925, 1592) WHERE id IN (1,2,3) 

这只会在uid确实是1,2,3时才起作用。

资料来源: http : //dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_elt

更简单的是:

 UPDATE `table` SET uid = ELT(id, 2952, 4925, 1592) WHERE id IN (1,2,3) 

那是因为你错过了ELSE。

“返回第一个条件为真的结果,如果没有匹配的结果值,则返回ELSE后的结果,如果没有ELSE部分,则返回NULL。 ( http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#operator_case