MySQL 데이터베이스의 모든 테이블에서 모든 필드에서 검색


298

MySQL 데이터베이스의 모든 테이블에서 주어진 문자열을 모든 필드에서 검색하고 싶습니다.

SELECT * FROM * WHERE * LIKE '%stuff%'

이런 식으로 할 수 있습니까?


2
이 블로그는 도움이 될 것입니다 : winashwin.wordpress.com/2012/08/28/mysql-search

답변:


81

information_schema스키마를 엿볼 수 있습니다 . 모든 테이블 목록과 테이블에있는 모든 필드가 있습니다. 그런 다음이 테이블에서 얻은 정보를 사용하여 쿼리를 실행할 수 있습니다.

관련된 테이블은 SCHEMATA, TABLES 및 COLUMNS입니다. 스키마에서 테이블이 생성되는 방식을 정확하게 구축 할 수 있도록 외래 키가 있습니다.


49
이것은 내가 원했던 대답이 아니라 진실을 받아 들여야합니다. : D 감사합니다
RSilva

1
이것은 정확하지만 내가 통해보고 된 DB를 모호하게 설정했기 때문에 @Dan 오히려의 대답은, 너무 도움이 난 그냥보고 열 이름이나 테이블 확실히 일 것입니다 무슨 알아낼 수 ...
DrCord

12
information_schema데이터베이스가 아니라 테이블입니다. 어떤 테이블을 검색해야하는지에 대한 설명 information_schema이 좋을 것입니다!
CaptSaltyJack

3
MySql이 모든 테이블을 검색하는 방법을 제공하지 않은 것은 나에게 유쾌합니다. 꽤 초보적인 옵션 인 것 같습니다
Kolob Canyon

@KolobCanyon MySQL은을 통해 그것을 할 수있는 옵션을 제공한다 DB_NAME LIKE '패턴'FROM 쇼 테이블
vladkras

442

당신은 할 수있는 SQLDump데이터베이스 (및 데이터)의를 한 후 해당 파일을 검색 할 수 있습니다.


20
mysqldump에 --extended-insert = FALSE 플래그를 사용하여 출력을보다 읽기 쉽게 만들 수 있습니다.
Benubird

26
저와 같이 연필에 대한 의견이 궁금 하다면 snopes.com/business/genius/spacepen.asp
Jason Swett

2
이것이 전체 DB를 검색하는 "표준"(사실) 방법입니다. 내가 좋아 mysqldump -T하는 지정된 디렉토리에 테이블 당 두 개의 파일을 생성합니다. 그런 다음 grep <search> *디렉토리에 반환되며 tablename.txt 또는 .sql 파일이 반환됩니다. txt 파일에는 테이블의 데이터 (탭으로 구분, Excel에서 열기 위해 CSV로 이름 바꾸기)가 있으며 SQL은 테이블 정의를 보유하고 있습니다. 이렇게하면 모든 것을 검색하고 데이터의 위치를 ​​좁히기가 쉽습니다. 이 방법은 특정 환경에서 작업하기가 매우 어려울 수 있습니다. 스택 오버플로는 여기서 매우 유용합니다.
Joel Mellon

큰 SQL이 있거나 아카이브에있을 때 서버에서 바로 MC로 열면보기-> 검색
Vitaly Zdanevich

1
좋은 제안! 그러나 db 덤프 파일이 실제로 큰 경우 (현재 상황 :))
Boban

207

phpMyAdmin이 설치되어 있다면 '검색'기능을 사용하십시오.

  • DB를 선택하십시오
  • DB가 선택되어 있는지 확인하십시오 (예 : 테이블이 아니라면 완전히 다른 검색 대화 상자가 나타납니다)
  • '검색'탭을 클릭하십시오
  • 원하는 검색어를 선택하십시오
  • 검색 할 테이블을 선택하십시오

나는 이것을 빠른 서버의 최대 250 테이블 / 10GB 데이터베이스에서 사용했으며 응답 시간은 놀랍지 않습니다.


8
우리 데이터베이스 중 하나는 92.7Gb이며이 옵션은 제대로 작동합니다. 훌륭한 솔루션
Tricky

5
나는 항상 모든 phpMyAdmin이 할 수있는 일을 잊어 버립니다. 훌륭한 도구입니다!
Ville

1
Magento db에서 매우 빠르고 유용합니다. 몇 초 안에 내가 찾고 있던 데이터의 필드와이를 참조하는 다른 모든 테이블을 찾았습니다.
mtrueblood

1
MySQL Workbench도이 기능을 가지고 있습니다 : "데이터베이스 >> 테이블 데이터 검색 ..."
matt wilkie

1
좋은! 이제 phpmyadmin에서 검색된 문자열을 어떻게 바꾸겠습니까?
Pathros

46

PHP 기능 :

function searchAllDB($search){
    global $mysqli;

    $out = "";

    $sql = "show tables";
    $rs = $mysqli->query($sql);
    if($rs->num_rows > 0){
        while($r = $rs->fetch_array()){
            $table = $r[0];
            $out .= $table.";";
            $sql_search = "select * from ".$table." where ";
            $sql_search_fields = Array();
            $sql2 = "SHOW COLUMNS FROM ".$table;
            $rs2 = $mysqli->query($sql2);
            if($rs2->num_rows > 0){
                while($r2 = $rs2->fetch_array()){
                    $column = $r2[0];
                    $sql_search_fields[] = $column." like('%".$search."%')";
                }
                $rs2->close();
            }
            $sql_search .= implode(" OR ", $sql_search_fields);
            $rs3 = $mysqli->query($sql_search);
            $out .= $rs3->num_rows."\n";
            if($rs3->num_rows > 0){
                $rs3->close();
            }
        }
        $rs->close();
    }

    return $out;
}

이것은 모르는 사람들을위한 포입니다.
Nandostyle

설정 $mysqli:이처럼$mysqli = new mysqli('localhost', 'root', 'hunter2', 'my_database');
아담 테일러

또한, 내가보기 엔 대체 추천 $colum과 함께 "`$colum`"그래서 예약 단어 필드하지 않습니다 문제 원인
아담 테일러

41

이 프로젝트를 사용할 수 있습니다 : http://code.google.com/p/anywhereindb

모든 테이블의 모든 데이터를 검색합니다.


더 이상 PHP7에서 작동하지 않습니다. (PHP 7.0.0로 mysql_connect는 제거, PHP 5.5.0에서 중단됨)
iDev247

12

stored procedures전염병과 같은 것을 피 하거나 mysql_dump권한으로 인해 또는 다른 다양한 이유로 부딪 칠 수없는 경우 .

다음과 같은 3 단계 접근 방식을 제안합니다.

1)이 쿼리가 결과 집합으로 많은 쿼리를 작성하는 경우

# =================
# VAR/CHAR SEARCH
# =================
# BE ADVISED USE ANY OF THESE WITH CAUTION
# DON'T RUN ON YOUR PRODUCTION SERVER 
# ** USE AN ALTERNATE BACKUP **

SELECT 
    CONCAT('SELECT * FROM ', A.TABLE_SCHEMA, '.', A.TABLE_NAME, 
           ' WHERE ', A.COLUMN_NAME, ' LIKE \'%stuff%\';') 
FROM INFORMATION_SCHEMA.COLUMNS A
WHERE 
            A.TABLE_SCHEMA != 'mysql' 
AND     A.TABLE_SCHEMA != 'innodb' 
AND     A.TABLE_SCHEMA != 'performance_schema' 
AND     A.TABLE_SCHEMA != 'information_schema'
AND     
        (
            A.DATA_TYPE LIKE '%text%'
        OR  
            A.DATA_TYPE LIKE '%char%'
        )
;

.

# =================
# NUMBER SEARCH
# =================
# BE ADVISED USE WITH CAUTION

SELECT 
    CONCAT('SELECT * FROM ', A.TABLE_SCHEMA, '.', A.TABLE_NAME, 
           ' WHERE ', A.COLUMN_NAME, ' IN (\'%1234567890%\');') 
FROM INFORMATION_SCHEMA.COLUMNS A
WHERE 
            A.TABLE_SCHEMA != 'mysql' 
AND     A.TABLE_SCHEMA != 'innodb' 
AND     A.TABLE_SCHEMA != 'performance_schema' 
AND     A.TABLE_SCHEMA != 'information_schema'
AND     A.DATA_TYPE IN ('bigint','int','smallint','tinyint','decimal','double')
;

.

# =================
# BLOB SEARCH
# =================
# BE ADVISED THIS IS CAN END HORRIFICALLY IF YOU DONT KNOW WHAT YOU ARE DOING
# YOU SHOULD KNOW IF YOU HAVE FULL TEXT INDEX ON OR NOT
# MISUSE AND YOU COULD CRASH A LARGE SERVER
SELECT 
    CONCAT('SELECT CONVERT(',A.COLUMN_NAME, ' USING utf8) FROM ', A.TABLE_SCHEMA, '.', A.TABLE_NAME, 
           ' WHERE CONVERT(',A.COLUMN_NAME, ' USING utf8) IN (\'%someText%\');') 
FROM INFORMATION_SCHEMA.COLUMNS A
WHERE 
            A.TABLE_SCHEMA != 'mysql' 
AND     A.TABLE_SCHEMA != 'innodb' 
AND     A.TABLE_SCHEMA != 'performance_schema' 
AND     A.TABLE_SCHEMA != 'information_schema'
AND     A.DATA_TYPE LIKE '%blob%'
;

결과는 다음과 같아야합니다.

이 결과를 다른 쿼리 창에 복사

2) 그러면 바로 Right Click사용할 수 있습니다 .Copy Row (tab-separated)

여기에 이미지 설명을 입력하십시오

3) 결과를 새 쿼리 창에 붙여넣고 마음의 내용으로 실행하십시오.

세부 사항 : 옵션을 Show Metadata and Internal Schemas선택 하지 않으면 일반적으로 워크 벤치에서 볼 수없는 시스템 스키마는 제외합니다 .

ANALYZE필요한 경우 전체 HOST 또는 DB에 빠른 방법을 제공 하거나 OPTIMIZE성능 향상을 지원하기 위해 명령문을 실행 하기 위해이 작업을 수행했습니다.

나는 당신 이 이것을 할 수 있는 다른 방법 이 있다고 확신 하지만 여기에 나에게 맞는 것이 있습니다 :

-- ========================================== DYNAMICALLY FIND TABLES AND CREATE A LIST OF QUERIES IN THE RESULTS TO ANALYZE THEM
SELECT CONCAT('ANALYZE TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbname';

-- ========================================== DYNAMICALLY FIND TABLES AND CREATE A LIST OF QUERIES IN THE RESULTS TO OPTIMIZE THEM
SELECT CONCAT('OPTIMIZE TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ';') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbname';

MySQL 버전에서 테스트 : 5.6.23

경고 :이 경우 다음을 실행하지 마십시오.

  1. 테이블 잠금을 유발하는 데 관심이 있습니다 (클라이언트 연결을 주시하십시오)
  2. 현재하고있는 일이 확실하지 않습니다.

  3. DBA를 화나게하려고합니다. ( 빨리 책상에 사람들이있을 수 있습니다 .)

건배, 제이;-]


1
라이브 DB에서 실행하려는 것은 아니지만 특정 디버깅 작업에 도움이됩니다. 열 유형이 문자열과 비교되지 않으면 실패합니다. 즉 int 열입니다.
Michael Thessel

요점은 블롭, 문자 또는 정수를 검색하는 세 가지 대안을 추가 한 것입니다. 이것은 일반 화일 뿐이므로 항상주의해서 사용해야합니다. 당신이 언급 한 바와 같이 PRODUCTION에서는 절대로 "인터넷에서 스크립트를 찾아서 이해하지 못하지만 여전히 실행하고 있습니다"라는 말을하게됩니다. 그러나 사람들이 어려운 방법을 배우는 방식입니다.
JayRizzo

8

또한 자체 mysql 크롤러에서 워드 프레스 구성을 검색하고 인터페이스와 데이터베이스 모두에서 찾을 수 없었으며 데이터베이스 덤프가 너무 무거워서 읽을 수 없었습니다. 나는 그것 없이는 할 수 없다고 말해야한다.

@Olivier의 것과 비슷하지만 이국적인 데이터베이스 / 테이블 이름을 관리하며 LIKE-joker 안전합니다.

<?php

$database = 'database';
$criteria = '*iemblo'; // you can use * and ? as jokers

$dbh = new PDO("mysql:host=127.0.0.1;dbname={$database};charset=utf8", 'root', '');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$tables = $dbh->query("SHOW TABLES");
while (($table = $tables->fetch(PDO::FETCH_NUM)) !== false)
{
    $fields = $dbh->prepare("SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?");
    $fields->execute(array ($database, $table[0]));

    $ors = array ();
    while (($field = $fields->fetch(PDO::FETCH_NUM)) !== false)
    {
        $ors[] = str_replace("`", "``", $field[0]) . " LIKE REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(:search, '\\\\', '\\\\\\\\'), '%', '\\%'), '_', '\\_'), '*', '%'), '?', '_')";
    }

    $request = 'SELECT * FROM ';
    $request .= str_replace("`", "``", $table[0]);
    $request .= ' WHERE ';
    $request .= implode(' OR ', $ors);
    $rows = $dbh->prepare($request);

    $rows->execute(array ('search' => $criteria));

    $count = $rows->rowCount();
    if ($count == 0)
    {
        continue;
    }

    $str = "Table '{$table[0]}' contains {$count} rows matching '{$criteria}'.";
    echo str_repeat('-', strlen($str)), PHP_EOL;
    echo $str, PHP_EOL;
    echo str_repeat('-', strlen($str)), PHP_EOL;

    $counter = 1;
    while (($row = $rows->fetch(PDO::FETCH_ASSOC)) !== false)
    {
        $col = 0;
        $title = "Row #{$counter}:";
        echo $title;
        foreach ($row as $column => $value)
        {
            echo
            (($col++ > 0) ? str_repeat(' ', strlen($title) + 1) : ' '),
            $column, ': ',
            trim(preg_replace('!\s+!', ' ', str_replace(array ("\r", "\t", "\n"), array ("", "", " "), $value))),
            PHP_EOL;
        }
        echo PHP_EOL;
        $counter++;
    }
}

이 스크립트를 실행하면 다음과 같은 결과가 출력 될 수 있습니다.

---------------------------------------------------
Table 'customers' contains 1 rows matching '*iemblo'.
---------------------------------------------------
Row #1: email_client: my@email.com
        numero_client_compta: C05135
        nom_client: Tiemblo
        adresse_facturation_1: 151, My Street
        adresse_facturation_2: 
        ville_facturation: Nantes
        code_postal_facturation: 44300
        pays_facturation: FR
        numero_tva_client: 
        zone_geographique: UE
        prenom_client: Alain
        commentaires: 
        nom_societe: 
        email_facturation: my@email.com

1
이 오류가 발생합니다. 치명적인 오류 : 'SQLSTATE [42000] 메시지와 함께'PDOException '예외가 발생했습니다. 구문 오류 또는 액세스 위반 : 1064 SQL 구문에 오류가 있습니다. 'key LIKE REPLACE (REPLACE (REPLACE (REPLACE ('180well * ','\\ ','\\\\ '),'% ','1 행 '
LLBBL

6

모든 열과 테이블을 검색하는 가장 간단한 쿼리입니다.

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

phpMyAdmin의 검색 탭을 통해 모든 테이블 또는 이름이 특정 문자열 인 테이블을 검색 할 수 있습니다.

좋은 질문이있다 ... \ ^. ^ /


20
그리고 값은 어떻습니까?
themhz

6

MySQL Workbench를 사용하면 여러 테이블을 쉽게 선택하고 DB의 모든 테이블에서 텍스트를 쉽게 검색 할 수 있습니다. ;-)


감사합니다! 처음으로 작업대를 사용했습니다. 상당히 직관적이어서 필요한 테이블을 가리키고 거기에서 찾을 수있었습니다.
joshmiller

6

이 질문은 오래되었지만 mysql workbench 6.3을 사용하는 경우 어떻게 할 수 있습니까? (대부분 다른 버전에서도 작동합니다)

스키마 및 "테이블 데이터 검색"을 마우스 오른쪽 단추로 클릭하고 값을 입력 한 후 "검색 시작"을 누르십시오. 그게 다야.


6

여기 내 해결책이 있습니다.

DROP PROCEDURE IF EXISTS findAll;
CREATE PROCEDURE `findAll`( IN `tableName` VARCHAR( 28 ) , IN `search` TEXT )
BEGIN
       DECLARE finished INT DEFAULT FALSE ;
       DECLARE columnName VARCHAR ( 28 ) ;
       DECLARE stmtFields TEXT ;
       DECLARE columnNames CURSOR FOR
              SELECT DISTINCT `COLUMN_NAME` FROM `information_schema`.`COLUMNS`
              WHERE `TABLE_NAME` = tableName ORDER BY `ORDINAL_POSITION` ;
       DECLARE CONTINUE HANDLER FOR NOT FOUND SET finished = TRUE;
       SET stmtFields = '' ;
       OPEN columnNames ;
       readColumns: LOOP
              FETCH columnNames INTO columnName ;
              IF finished THEN
                     LEAVE readColumns ;
              END IF;
              SET stmtFields = CONCAT(
                     stmtFields , IF ( LENGTH( stmtFields ) > 0 , ' OR' , ''  ) ,
                     ' `', tableName ,'`.`' , columnName , '` REGEXP "' , search , '"'
              ) ;
       END LOOP;
       SET @stmtQuery := CONCAT ( 'SELECT * FROM `' , tableName , '` WHERE ' , stmtFields ) ;
       PREPARE stmt FROM @stmtQuery ;
       EXECUTE stmt ;
       CLOSE columnNames ;
END;

1
실행 CALL findAll('tbl_test','abb')하면 다음 오류가 발생합니다. # 1267- '='작업에 대한 데이터 정렬 (utf8_general_ci, IMPLICIT)과 (utf8_unicode_ci, IMPLICIT)의 잘못된 조합 을 수정할 수 있습니까? 감사!
Davuz

6

이것이 내가 아는 간단한 방법입니다. PHPMyAdmin에서 DB를 선택하고 "검색"탭으로 이동하여 찾고자하는 곳과 검색 할 곳을 작성하십시오. 모든 테이블에서 단어를 검색하려면 모든 테이블을 선택하십시오. 그런 다음 "GO"하고 결과를보십시오.Wordpress DB에서 VCD (backdoor)라는 단어를 찾아 삭제하려고합니다.


5

HeidiSQL은 널리 사용되는 MySQL 서버를 사용하는 웹 개발자를 위해 설계된 유용하고 안정적인 도구입니다.

HeidiSQL에서 shift + ctrl + f를 누르면 서버의 모든 테이블에서 텍스트를 찾을 수 있습니다. 이 옵션은 매우 유용합니다.


+1 일을 잘하는 것 같고 다른 답변들과 관련된 친구들을 구하는 유용한 도구입니다. 또한 검색 할 데이터베이스를 선택할 수 있습니다.
Steve Chambers

3

당신은 사용할 수 있습니다

SHOW TABLES;

그런 다음 해당 테이블의 열을 루프로 가져옵니다.

SHOW COLUMNS FROM table;

그런 다음 해당 정보를 사용하여 필요한 경우 UNION을 수행 할 수있는 많은 쿼리를 만듭니다.

그러나 이것은 데이터베이스에서 매우 무겁습니다. 특히 LIKE 검색을하는 경우.


SHOW TABLES FROM <db_name>더 정확합니다
vladkras

3

이 솔루션
a)는 MySQL 일 뿐이며 다른 언어는 필요하지 않으며
b) 처리 할 준비가 된 SQL 결과를 반환합니다!

#Search multiple database tables and/or columns
#Version 0.1 - JK 2014-01
#USAGE: 1. set the search term @search, 2. set the scope by adapting the WHERE clause of the `information_schema`.`columns` query
#NOTE: This is a usage example and might be advanced by setting the scope through a variable, putting it all in a function, and so on...

#define the search term here (using rules for the LIKE command, e.g % as a wildcard)
SET @search = '%needle%';

#settings
SET SESSION group_concat_max_len := @@max_allowed_packet;

#ini variable
SET @sql = NULL;

#query for prepared statement
SELECT
    GROUP_CONCAT("SELECT '",`TABLE_NAME`,"' AS `table`, '",`COLUMN_NAME`,"' AS `column`, `",`COLUMN_NAME`,"` AS `value` FROM `",TABLE_NAME,"` WHERE `",COLUMN_NAME,"` LIKE '",@search,"'" SEPARATOR "\nUNION\n") AS col
INTO @sql
FROM `information_schema`.`columns`
WHERE TABLE_NAME IN
(
    SELECT TABLE_NAME FROM `information_schema`.`columns`
    WHERE
        TABLE_SCHEMA IN ("my_database")
        && TABLE_NAME IN ("my_table1", "my_table2") || TABLE_NAME LIKE "my_prefix_%"
);

#prepare and execute the statement
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

이러한 종류의 솔루션은 일반적으로 phpfiddler에 추가하면 좋을 것이므로 사람들은 솔루션을보고 의견을 말할 수 있습니다. :)
pal4life 2016 년

#1243 - Unknown prepared statement handler (stmt) given to EXECUTE전체 데이터베이스에서 검색하기 위해 Phpmyadmin에서 쿼리를 실행할 때 오류가 발생 합니다
Vicky Dev

@VickyDev 귀하의 질문 이후 1 년 이상이 지났음을 알고 있습니다. 죄송합니다. 그럼에도 불구하고 : stmt가 EXECUTE 위의 행에 선언되어 있기 때문에 스크립트에 다른 문제가 있다고 생각합니다. 어떤 버전의 MySQL을 사용하고 있습니까?
Chonez

2

Olivier의 PHP 답변을 약간 수정했습니다.

  • 문자열을 찾은 결과를 출력
  • 결과없이 테이블을 생략
  • 열 이름이 검색 입력과 일치하면 출력 표시
  • 총 결과 수 표시

    function searchAllDB($search){
        global $mysqli;
    
        $out = "";
        $total = 0;
        $sql = "SHOW TABLES";
        $rs = $mysqli->query($sql);
        if($rs->num_rows > 0){
            while($r = $rs->fetch_array()){
                $table = $r[0];
                $sql_search = "select * from ".$table." where ";
                $sql_search_fields = Array();
                $sql2 = "SHOW COLUMNS FROM ".$table;
                $rs2 = $mysqli->query($sql2);
                if($rs2->num_rows > 0){
                    while($r2 = $rs2->fetch_array()){
                        $colum = $r2[0];
                        $sql_search_fields[] = $colum." like('%".$search."%')";
                        if(strpos($colum,$search))
                        {
                            echo "FIELD NAME: ".$colum."\n";
                        }
                    }
                    $rs2->close();
                }
                $sql_search .= implode(" OR ", $sql_search_fields);
                $rs3 = $mysqli->query($sql_search);
                if($rs3 && $rs3->num_rows > 0)
                {
                    $out .= $table.": ".$rs3->num_rows."\n";
                    if($rs3->num_rows > 0){
                        $total += $rs3->num_rows;
                        $out.= print_r($rs3->fetch_all(),1);
                        $rs3->close();
                    }
                }
            }
            $out .= "\n\nTotal results:".$total;
            $rs->close();
        }
        return $out;
    }

1

나는 이전 답변을 기반으로하고 이것을 가지고 있으며 모든 출력에 편리하게 결합 할 수있는 추가 패딩입니다.

SELECT 
CONCAT('SELECT ''',A.TABLE_NAME, '-' ,A.COLUMN_NAME,''' FROM ', A.TABLE_SCHEMA, '.', A.TABLE_NAME, 
       ' WHERE ', A.COLUMN_NAME, ' LIKE \'%Value%\' UNION')
FROM INFORMATION_SCHEMA.COLUMNS A
WHERE 
        A.TABLE_SCHEMA != 'mysql' 
AND     A.TABLE_SCHEMA != 'innodb' 
AND     A.TABLE_SCHEMA != 'performance_schema' 
AND     A.TABLE_SCHEMA != 'information_schema'
UNION SELECT 'SELECT '''

-- for exact match use: A.COLUMN_NAME, ' LIKE \'Value\' instead

먼저 이것을 실행 한 다음 붙여 넣은 후 결과를 편집 (편집하지 않음)하면 값이 사용되는 모든 테이블 이름과 열이 표시됩니다.


1
열 값을 4 번 확인하는 것이 가장 간단한 방법은 아닙니다. 가능하면 / WHERE NOT A.TABLE_SCHEMA IN ('mysql', 'innodb', 'performance_schema', 'information_schema')더 나은 방법으로 실행하고 사용 된 스키마를 확인하고 대신 다른 모든 것을 제외하고 사용 된 스키마를 설정하십시오.
bradbury9

1

나는 이것을 작동시켰다. 당신은 변수를 변경해야합니다

$query ="SELECT `column_name` FROM `information_schema`.`columns` WHERE `table_schema`='" . $_SESSION['db'] . "' AND `table_name`='" . $table . "' ";
$stmt = $dbh->prepare($query);
$stmt->execute(); 
$columns = $stmt->fetchAll(PDO::FETCH_ASSOC);       

$query="SELECT name FROM `" . $database . "`.`" . $table . "` WHERE ( ";
foreach ( $columns as $column ) {
    $query .=" CONVERT( `" . $column['column_name'] . "` USING utf8 ) LIKE '%" . $search . "%' OR ";
}
$query = substr($query, 0, -3);
$query .= ")";

echo $query . "<br>";
$stmt=$dbh->prepare($query);
$stmt->execute();
$results = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo "<pre>";
print_r ($results );
echo "</pre>";

1

HeidiSQL을 사용 하여이 작업을 수행했습니다. 찾기 쉽지는 않지만 Ctrl + Shift + F를 누르면 "테이블 도구"대화 상자가 표시됩니다. 그런 다음 검색 할 항목을 선택하고 (전체 데이터베이스를 단일 테이블로) "찾을 텍스트"값을 입력하고 "찾기"를 클릭하십시오. 놀랍게도 빠른 것으로 나타났습니다 (1 분 내에 870MiB db)


0

Union을 사용하여 쿼리를 함께 묶었습니다. 그것이 가장 효율적인 방법인지 모르지만 작동합니다.

SELECT * FROM table1 WHERE name LIKE '%Bob%' Union
SELCET * FROM table2 WHERE name LIKE '%Bob%';

이 답변의 문제점은 가변적이고 알 수없는 테이블 수가 있다는 것입니다.
bradbury9

0

리도 나 모든 테이블을 읽을 수있는 멋진 라이브러리가 있습니다.

$database = new ridona\Database('mysql:dbname=database_name;host=127.0.0.1', 'db_user','db_pass');

foreach ($database->tables()->by_entire() as $row) {

....do

}

0

이것이 최신 버전인지는 모르겠지만 창 에서 Tables옵션을 마우스 오른쪽 버튼으로 클릭하면NavigatorSearch Table Data . 검색 문자열을 채우고 검색을 수행하는 검색 상자가 열립니다.

왼쪽 창에서 검색하려는 테이블을 선택해야합니다. 그러나 Shift 키를 누른 상태에서 한 번에 10 개의 테이블을 선택하면 MySql이이를 처리하고 결과를 초 단위로 반환 할 수 있습니다.

더 나은 옵션을 찾는 사람이라면 누구나! :)


이 모든 것을 어떤 응용 프로그램에서하고 있습니까?
존 슈나이더

그는 네비게이터 애플리케이션을 사용하고 있습니다.
Damir Olejar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.