我正在搜索运行PhpMyAdmin的SQL查询,以查找包含给定字符串的数据库的所有表中的所有记录。 到目前为止,我发现的只是一个问题:
SELECT * FROM information_schema.`COLUMNS` C WHERE TABLE_SCHEMA = 'final_year_project_demo'
返回架构中的所有表,但我在SQL中效率不高,因此无法进一步移动。
我需要的是一个查询,它将列出通过上面代码列出的所有表中的所有记录(包含任何列中的特定字符串)。 所有表中的列都相同。
答案 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';
在这里,我们使用的事实是您说您正在寻找一个字符串,并且所有字符串类型字段都有一个collation_name。将WHATEVER替换为您要查找的内容。