MySQL查询在完整数据库中搜索记录

时间:2014-05-12 20:56:50

标签: mysql sql phpmyadmin

我正在搜索运行PhpMyAdmin的SQL查询,以查找包含给定字符串的数据库的所有表中的所有记录。 到目前为止,我发现的只是一个问题:

SELECT * FROM information_schema.`COLUMNS` C WHERE TABLE_SCHEMA = 'final_year_project_demo'

返回架构中的所有表,但我在SQL中效率不高,因此无法进一步移动。

我需要的是一个查询,它将列出通过上面代码列出的所有表中的所有记录(包含任何列中的特定字符串)。 所有表中的列都相同。

1 个答案:

答案 0 :(得分:0)

这有点复杂。你真的不能一步到位。我会给你一些开始的东西,你必须从那里拿走它:

select CONCAT("SELECT * FROM ", TABLE_NAME, " WHERE user_id=1;") FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME="user_id";

现在这将产生如下输出:

+--------------------------------------------------------------------+
| CONCAT("SELECT * FROM ", TABLE_NAME, " WHERE user_id=1;")          |
+--------------------------------------------------------------------+
| SELECT * FROM table0 WHERE user_id=1;                              |
| SELECT * FROM table1 WHERE user_id=1;                              |

现在,您想要转身并执行所有这些命令......所以这样做:

select CONCAT("SELECT * FROM ", TABLE_NAME, " WHERE user_id=1;") FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME="user_id" INTO OUTFILE "some_file_path_and_name";

这将为您提供一个文本文件,其中包含您要查找的所有命令。

更新---

我错过了“For any column bit ..”

select CONCAT("SELECT * FROM ", TABLE_NAME, " WHERE ", COLUMN_NAME, "='WHATEVER';") FROM INFORMATION_SCHEMA.COLUMNS WHERE COLLATION_NAME IS NOT NULL INTO OUTFILE 'somepath';

在这里,我们使用的事实是您说您正在寻找一个字符串,并且所有字符串类型字段都有一个collat​​ion_name。将WHATEVER替换为您要查找的内容。