mySQL查询在数据库中的所有表中搜索字符串?

时间:2011-09-23 00:31:46

标签: mysql sql phpmyadmin mysql-workbench

是否有mySQL查询来搜索数据库中的所有表格?

如果没有,你可以从mySQL workbench GUI搜索数据库中的所有表吗?

来自phpmyadmin的搜索面板可用于选择所有表格进行搜索。我发现这个超级有效,因为magento,我正在使用的电子商务包有数百个表,不同的产品细节在不同的表中。

enter image description here

5 个答案:

答案 0 :(得分:11)

如果您想在没有任何编程语言帮助的情况下完全使用MySQL,您可以使用:

## Table for storing resultant output

CREATE TABLE `temp_details` (
 `t_schema` varchar(45) NOT NULL,
 `t_table` varchar(45) NOT NULL,
 `t_field` varchar(45) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

## Procedure for search in all fields of all databases
DELIMITER $$
#Script to loop through all tables using Information_Schema
DROP PROCEDURE IF EXISTS get_table $$
CREATE PROCEDURE get_table(in_search varchar(50))
 READS SQL DATA
BEGIN
 DECLARE trunc_cmd VARCHAR(50);
 DECLARE search_string VARCHAR(250);

 DECLARE db,tbl,clmn CHAR(50);
 DECLARE done INT DEFAULT 0;
 DECLARE COUNTER INT;

 DECLARE table_cur CURSOR FOR
 SELECT concat('SELECT COUNT(*) INTO @CNT_VALUE FROM `',table_schema,'`.`',table_name,'` WHERE `', column_name,'` REGEXP ''',in_search,''';')
 ,table_schema,table_name,column_name
 FROM information_schema.COLUMNS
 WHERE TABLE_SCHEMA NOT IN ('information_schema','test','mysql');

 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;

 #Truncating table for refill the data for new search.
 PREPARE trunc_cmd FROM "TRUNCATE TABLE temp_details;";
 EXECUTE trunc_cmd ;

 OPEN table_cur;
 table_loop:LOOP
 FETCH table_cur INTO search_string,db,tbl,clmn;

 #Executing the search
 SET @search_string = search_string;
 SELECT search_string;
 PREPARE search_string FROM @search_string;
 EXECUTE search_string;


 SET COUNTER = @CNT_VALUE;
 SELECT COUNTER;

 IF COUNTER>0 THEN
 # Inserting required results from search to table
 INSERT INTO temp_details VALUES(db,tbl,clmn);
 END IF;

 IF done=1 THEN
 LEAVE table_loop;
 END IF;
 END LOOP;
 CLOSE table_cur;

 #Finally Show Results
 SELECT * FROM temp_details;
END $$
DELIMITER ;

来源:http://forge.mysql.com/tools/tool.php?id=232

答案 1 :(得分:11)

如果您使用的是 MySQL Workbench ,您可以通过右键单击要搜索的数据库架构来执行此操作,然后“搜索表数据... ”。

在那里,您可以选择“使用REXEXP搜索”选项,然后像往常一样输入搜索文本。它将提供与您的特定文本匹配的数据库行。

您还需要查看“所有类型的搜索列”框。

答案 2 :(得分:8)

或者,如果您的数据库不是那么庞大,您可以进行转储并在.sql生成的文件中进行搜索。

答案 3 :(得分:0)

在MySQL Workbench中,您可以使用Table Data Search功能。它可以搜索多个表和/或多个数据库。

答案 4 :(得分:0)

在数据库的所有表中搜索字符串是一项复杂的任务。通常,您不需要使用所有表格,并且在没有特定布局(带匹配的表格树等)的情况下读取结果很复杂。

SQL Workbench/J提供GUI和命令行版本来执行此类任务:

更多信息:

注意:如果配置不正确,使用jdbc驱动程序搜索会占用大量内存。 SQL Workbench / J警告说,虽然在线文档有点过时,文档的来源(doc / xml / db-problems.xml)解释了如何为不同的BBDD修复它:

这里是postgres的摘录:

  

PostgreSQL JDBC驱动程序默认缓冲从数据库获得的结果           在将它们返回给应用程序之前在内存中这意味着在检索时           数据和& wb-productname;使用(在很短的时间内)内存的两倍           需要。这也意味着WbExport或WbCopy会           在将其写入输出文件之前,有效地将整个结果读入内存。           对于大型出口,我们通常不想要。   可以更改驱动程序的此行为,以便驱动程序使用基于游标的检索。           为此,连接配置文件必须禁用" Autocommit"选项,并且必须定义           默认提取大小大于零。推荐值例如是10,可能是           更高的数字可以提供更好的表现。为获取大小定义的数字,           在请求更多内容之前,定义驱动程序在其内部缓冲区中保留的行数           来自后端的行。