首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何自动执行从information_schema生成的MySQL语句?

如何自动执行从information_schema生成的MySQL语句?
EN

Stack Overflow用户
提问于 2011-05-23 22:23:13
回答 1查看 1.1K关注 0票数 1

我有一个带有许多数据库的MySQL服务器,这些数据库具有类似的表结构。当一个遗留软件进入错误状态时,它会在几个表中写一行,并给我发电子邮件。我正在尝试编写一个简单的SQL查询来清除这些表(TRUNCATE)。

在我的bash脚本中,我目前有:

代码语言:javascript
复制
mysql -e "SELECT CONCAT('TRUNCATE TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ';') 
          FROM information_schema.TABLES 
          WHERE TABLE_NAME IN ('errorLog', 'errorLogBacktrace', 'errorLogUrl');" | 
grep -v 'CONCAT(' |
mysql

添加行回车符,希望有助于易读性。

但是这似乎不起作用,并且只执行由上面的select生成的第一个TRUNCATE TABLE查询。

上述代码的选择部分的输出:

代码语言:javascript
复制
mysql -e "SELECT CONCAT('TRUNCATE TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ';') 
          FROM information_schema.TABLES 
          WHERE TABLE_NAME IN ('errorLog', 'errorLogBacktrace', 'errorLogUrl');" | 
grep -v 'CONCAT('

是:

代码语言:javascript
复制
TRUNCATE TABLE db1.errorLog;
TRUNCATE TABLE db1.errorLogBacktrace;
TRUNCATE TABLE db1.errorLogUrl;
TRUNCATE TABLE db2.errorLog;
TRUNCATE TABLE db2.errorLogBacktrace;
TRUNCATE TABLE db2.errorLogUrl;
TRUNCATE TABLE db3.errorLog;
TRUNCATE TABLE db3.errorLogBacktrace;
TRUNCATE TABLE db3.errorLogUrl;

我怎么才能让它工作呢?我是否需要遍历这些行并逐个执行它们,如果是这样的话,如何执行?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-23 22:39:16

看起来我把事情复杂化了。在对serverfault进行了一些搜索之后,我发现:https://serverfault.com/questions/124797/alter-table-for-all-tables-in-a-database

所以我的命令现在看起来是这样的:

代码语言:javascript
复制
mysql --batch --skip-column-names -e "SELECT CONCAT('TRUNCATE TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ';') AS table_sql FROM information_schema.TABLES WHERE TABLE_NAME IN ('errorLog', 'errorLogBacktrace', 'errorLogUrl');" | mysql

通过适当的MySQL转义,它应该是:

代码语言:javascript
复制
mysql --batch --skip-column-names -e "SELECT CONCAT('TRUNCATE TABLE \`', TABLE_SCHEMA, '\`.\`', TABLE_NAME, '\`;') AS table_sql FROM information_schema.TABLES WHERE TABLE_NAME IN ('errorLog', 'errorLogBacktrace', 'errorLogUrl');" | mysql

Backticks转义MySQL数据库中的关键字和列名,附加的反斜杠是为了转义bash的反引号,因为字符串正在被输送到第二个MySQL进程。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6098532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档