从mysql中的数据库中的所有表中选择位置未知的内容

时间:2011-02-09 13:06:52

标签: mysql select grep

我的数据库中有一个值为Foo的varchar,我不知道究竟在哪里。

是否可以创建一个查询来搜索此内容的所有表和所有列?与grep

类似

3 个答案:

答案 0 :(得分:1)

没有一种简单的方法可以做到这一点,但您可以使用信息模式来查找所有varchar列。

SELECT table_name, column_name 
FROM information_schema.columns
WHERE data_type = 'varchar';

然后,您可以编写一个查询来生成一个查询列表,您需要运行这些查询来搜索您的术语。

SELECT CONCAT(
    'select ', column_name, 
    ' from ', table_name, 
    ' where ', column_name, ' like \'%foo%\''
) AS stmt
FROM information_schema.columns
WHERE data_type = 'varchar';

更高级的示例可能会将匹配项与表名和列名一起插入结果表中。

答案 1 :(得分:0)

这里有一个存储过程(http://forge.mysql.com/tools/tool.php?id=232)用于MySQL,它将创建一个用于存储输出的表,然后循环通过information_schema数据库的COLUMNS表来获取所有数据库的表和列名。接下来在database.table上为每个列执行count()查询,并在where条件中使用适当的搜索字符串。如果计数()> 0,该特定列具有搜索项,因此它将该三元组(数据库名称,表名,列名)插入表中。最后从表中选择*以查看具有搜索词的相应数据库表和列名。

答案 2 :(得分:0)

我找到了一种非常简单的方法。

mysqldump -u user -p mydatabase | grep foo