我想创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命令中转义任何特殊字符。