mysql脚本bash循环

时间:2012-02-14 20:45:05

标签: mysql bash

我有一个包含数字列表的csv文件,

479856252|1329148400996|1329148405406|1329148412444|0|6042292534|6042292534|14016487697|0|6
479856262|1329148401487|1329148405287|1329148412444|0|6136992594|6136992594|14016487697|0|6
479856272|1329148405124|1329148405124|1329148412470|0|8883398128||4016487697|0||P|0|7
479856282|1329148114930|1329148117966|1329148412502|0|8006564132|8779918502|7657954163|2609

当我做awk -F'|' '{print $1;}' file.csv > file2.csv

我得到以下表格ID

12345
67891
32234
22345
12345

我有一个像这样工作的for循环

for i in `cat file2.cvs`
do 
DELETE FROM TABLE1 WHERE ID = $i
done 
然而,这会在我的盒子上产生很高的负荷,我希望我可以分割操作(对于file2.csv中的每100条记录)执行删除然后睡眠1秒,剩余值的收益直到结束文件。

非常感谢您的帮助。

谢谢

3 个答案:

答案 0 :(得分:0)

在一个SQL命令中执行:

DELETE FROM TABLE1 WHERE ID in (`cat file2.cvs | tr '\n' ','` -1)

最后的-1是为了迎合尾随的逗号。如果您的输入文件在最后一行没有换行符,则不需要-1

答案 1 :(得分:-1)

每100次删除后,您可以保留现有的文件结构,而不是在每100次删除后休眠1秒,而不是在每次删除后休眠0.01秒,以实现基本相同的事情。

这样的事情:

for i in `cat file2.cvs`
do 
  mysql -e "DELETE FROM TABLE1 WHERE ID = ${i};"
  sleep .01
done 

答案 2 :(得分:-1)

只需使用辅助变量来计算循环次数。

j=0
for i in `cat file2.cvs`
do

    if [ $j -eq 100 ]
    then
        sleep 1  
        j=0
    fi        

    j=$[ j+1 ]
done