在包含超过500,000行的MySQL表中,如何为同一列更新20,000行具有相同值的行?
我有一个默认为0
的已处理列,我想将其更新为3
,以便不会挑选这20,000个条目进行处理。
到目前为止我尝试过:我创建了一个包含所有20,000个ID列表的文件并尝试了此查询:
update table set processed=3 where id in (...)
然后我尝试粘贴...
中的id列表,但它使系统挂起。
在表格中,我希望其他行保留processed=0
,因此set processed=3 where processed=0
无效。我必须按ID定位特定行。
答案 0 :(得分:1)
这就是我所做的:
我创建了一个PHP脚本,该脚本从id为#的文件中提取id,然后使用for循环创建一个查询并专门更新该行:
ID文件:
5351245
5351246
5351247
...
5373362
5373363
5373364
PHP脚本:
$file = "ids.txt";
$link = mysqli_connect("localhost", "[USERNAME]", "[PASSWORD]", "[DATABASE]");
$handle = fopen($file, "r");
if ($handle) {
while (($id = fgets($handle)) !== false) {
$sql = "UPDATE responses SET bucketID=0, processed=3 WHERE messageID=".$id.";";
if(mysqli_query($link, $sql)){
echo "Record $id was updated successfully.\n";
} else {
echo "ERROR: Could not able to execute $sql. " . mysqli_error($link)."\n";
}
}
fclose($handle);
}