脚本search匹配模式的表格,然后截断它们

我想创build一个脚本来search匹配模式的表格,然后截断它们。

我login到MySQL,并运行以下给出正确的表:

SELECT concat('TRUNCATE TABLE `', TABLE_NAME, '`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'weather%'; 

然而,我不知道如何将这embedded到一个shell脚本,它会输出SQL像这样:

 TRUNCATE TABLE `weather`; TRUNCATE TABLE `weathermonth`; TRUNCATE TABLE `weathermonthlp`; 

然后执行语句。

谢谢

您可以从这样的事情开始,并根据需要添加更多的代码,例如数据库参数。 当使用空格进行搜索时,请务必使用引号。

./truncate.sh“一些搜索与空间,如果它甚至有可能在表名中的空间”

 #!/bin/bash searchpattern="$1" table_list=$(mysql -BN -e "SELECT CONCAT(TABLE_SCHEMA,'.', TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '$searchpattern%';") echo $table_list; IFS=" " while read i; do echo "TRUNCATE TABLE $i;" done < <(echo $table_list) 

那个脚本应该输出sql,但是你需要在运行之前验证它

要从shell运行MySQL命令,您可以管道到mysql的标准输入,例如:

 mysql << 'EOF' SELECT concat('TRUNCATE TABLE `', TABLE_NAME, '`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'weather%'; EOF 

现在,你的MySQL命令会产生更多的MySQL命令…如果你想执行这些命令,你可以再次使用-s标志来禁止MySQL自己在这个过程中产生的非查询输出,如下所示:

 mysql -s << 'EOF' | mysql SELECT concat('TRUNCATE TABLE `', TABLE_NAME, '`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'weather%'; EOF 

请注意, << 'EOF'是一个here-document,其内容是从字面上看的,所以你不需要在MySQL命令中转义任何特殊字符。