我的数据库中有一个值为Foo
的varchar,我不知道究竟在哪里。
是否可以创建一个查询来搜索此内容的所有表和所有列?与grep
答案 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