我有一个MySQL列错误地加载了数据。我创建了一个脚本,用于读取我知道弄错的1400万个主键的文本文件。我有一个基本的bash while
循环,但不是为每个id发出一个单独的mysql命令,我想为一组id(我确实拥有1400万)执行此操作。使用BASH数组修改MySQL表格
目前:
while IFS='' read -r id || [[ -n "$id" ]]; do
mysql -e "UPDATE my_table SET direct = 1 WHERE id = $id" -u $USER -p$PASS db
done < "$1"
什么,我想要做的是在阅读一组的id和这样说WHERE id in ($#ids)
,而无需执行一堆循环和modulos的。想法?
可行,但要记住正常的命令行和查询字符串的长度限制。你将只能在shell中删除/截断之前将这么多id加入到cli中。 –
查询长度限制?我正在考虑在文件中读取$ STRING变量,因此$ STRING看起来像“1283792,7657887263,16876873”等,然后将其转储到'in()'子句中。 – jiveturkey
mysql中的'max_allowed_packet'。任何比这更长的时间将会......不好。 –