Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mySQL查询在数据库中的所有表中搜索字符串?_Mysql_Sql_Phpmyadmin_Mysql Workbench - Fatal编程技术网

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

mySQL查询在数据库中的所有表中搜索字符串?,mysql,sql,phpmyadmin,mysql-workbench,Mysql,Sql,Phpmyadmin,Mysql Workbench,是否有mySQL查询来搜索数据库中的所有表? 如果没有,您能否从mySQL workbench GUI搜索数据库中的所有表 在phpmyadmin中有一个搜索面板,您可以使用它来选择要搜索的所有表。我发现这非常有效,因为magento,我正在使用的电子商务包有数百个表,不同的产品细节在不同的表中 如果您想完全在MySQL中完成,而不需要任何编程语言的帮助,您可以使用以下方法: ## Table for storing resultant output CREATE TABLE `temp_de

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

如果没有,您能否从mySQL workbench GUI搜索数据库中的所有表

在phpmyadmin中有一个搜索面板,您可以使用它来选择要搜索的所有表。我发现这非常有效,因为magento,我正在使用的电子商务包有数百个表,不同的产品细节在不同的表中


如果您想完全在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 ;

来源:

在MySQL工作台中,您可以使用该功能。它可以跨多个表和/或多个数据库进行搜索。

如果您使用的是MySQL Workbench,您可以通过右键单击要搜索的DB架构,然后“搜索表数据…””来完成此操作

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


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

在数据库的所有表中搜索字符串是一项复杂的任务。通常情况下,您不需要完全使用所有表,如果没有特定的布局(表的树与匹配项或类似内容),读取结果会很复杂

提供GUI和命令行版本来执行此任务:

更多信息:

注意:如果未正确配置JDBC驱动程序,则使用JDBC驱动程序进行搜索会占用大量内存。SQL Workbench/J对此发出警告,尽管在线文档有点过时,但文档来源(doc/xml/db problems.xml)解释了如何为不同的BBDD修复它:

以下是博士后的摘录:

PostgreSQL JDBC驱动程序默认缓冲从数据库获得的结果 在将它们返回到应用程序之前在内存中。这意味着在检索数据时,&wb productname;使用(短时间内)两倍于实际需要的内存。这也意味着WbExport或WbCopy将 将整个结果有效地读入内存,然后再将其写入输出文件。 对于大型出口,这通常是不需要的。 可以更改驱动程序的此行为,以便驱动程序使用基于光标的检索。 为此,连接配置文件必须禁用“自动提交”选项,并且必须定义大于零的默认提取大小。建议值为10,数字越大性能越好。为提取大小定义的数字, 定义驱动程序在请求更多之前在其内部缓冲区中保留的行数 来自后端的行


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

我建议在DROP过程之前添加行集sql\u notes=0$$,如果存在,则获取\u table$$,否则它将显示警告
过程
不存在。旧帖子,但我也在寻找类似的内容,但没有使用MySQL函数或在任何程度上都要遵守程序。OP正在寻找搜索数据库中所有表的内容,但此过程似乎搜索所有数据库。它的工作原理几乎没有什么不同,因为它返回的数组是search_string=query(循环查询)。但当我注释行时:选择搜索字符串;并选择计数器,然后,它工作正常,并且过程返回正确的内容。它可能是由于DB版本,我的是MariaDB 10.1.31。这确实是我的首选方式,直接从命令行(所以不使用sql>prompt登录)。这里有更多信息:然后您可以使用grep“search terms”~/backup.sql轻松搜索