Поиск по всем полям из каждой таблицы базы данных 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
Это правильно, но ответ @Dan Rather тоже помог, потому что БД, которую я просматривал, был неясным, и я не мог понять, каким будет имя столбца или таблицы, просто посмотрев ...
— DrCord

12
information_schemaэто база данных, а не таблица. Некоторые уточнения, по какой таблице искать, information_schemaбыло бы хорошо!
— CaptSaltyJack

3
Для меня довольно забавно, что MySql не предоставляет возможности поиска по всем таблицам. Похоже, довольно рудиментарный вариант
— Каньон Колоб

@KolobCanyon MySQL предоставляет возможность сделать это с помощью ПОКАЗАТЬ ТАБЛИЦЫ ОТ db_name, КАК 'pattern'
— vladkras

442

Вы можете сделать SQLDumpиз базы данных (и ее данных), а затем искать этот файл.


20
Не забудьте, что вы можете использовать --extended-insert = FALSE флаг для mysqldump, чтобы сделать вывод более читабельным.
— Benubird

26
В случае, если вам интересно, как и мне, о чем говорит карандашный комментарий: snopes.com/business/genius/spacepen.asp
— Джейсон Светт,

2
Это «стандартный» (де-факто) способ поиска по всем БД. Мне нравится, mysqldump -Tкоторый создает два файла на таблицу в указанном каталоге. Затем я grep <search> *в директории, и возвращается файл tablename.txt или .sql. Файл txt содержит данные для таблицы (разделитель табуляции, переименование в csv для открытия в Excel), а sql содержит определение таблицы, как вы уже догадались: SQL. Таким образом, вы ищите все, и вы легко сможете определить, где находятся ваши данные. Этот метод может быть довольно трудным для работы в определенных условиях. Переполнение стека очень полезно здесь.
— Джоэл Меллон

Если у вас большой SQL или, может быть, в архиве - вы можете открыть его в MC прямо на сервере, а затем просмотреть-> Поиск
— Виталий Зданевич

1
Хорошее предложение! Но это не будет работать, если файл дампа БД очень большой (ситуация, которая у меня сейчас :))
— Бобан,

207

Если у вас установлен phpMyAdmin, используйте функцию «Поиск».

  • Выберите свою БД
  • Убедитесь, что у вас выбрана БД (т.е. не таблица, иначе вы получите совершенно другой диалог поиска)
  • Нажмите вкладку «Поиск»
  • Выберите искомое условие
  • Выберите таблицы для поиска

Я использовал это до 250 таблиц / 10 ГБ баз данных (на быстром сервере), и время отклика просто удивительно.


8
Одна из наших баз данных - 92,7 Гб, и эта опция работала просто отлично. Отличное решение
— Хитрый

5
Я всегда забываю, что может сделать весь phpMyAdmin. Это отличный инструмент!
— Вилле

1
Очень быстрый и полезный в моем Magento DB. Через пару секунд нашел поле для данных, которые я искал, а также все другие таблицы, которые на него ссылались.
— mtrueblood

1
MySQL Workbench также имеет эту функцию: «База данных >> Поиск в таблице данных ...»
— Мэтт Уилки

1
Ницца! Теперь, как бы вы заменили искомую строку в phpmyadmin?
— Патрос

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;
}

Это фо, для тех, кто может не знать.
— Нандостиль

Установите $mysqliтак:$mysqli = new mysqli('localhost', 'root', 'hunter2', 'my_database');
— Адам Тейлор

Кроме того, я настоятельно рекомендую заменить $columна "`$colum`"так, чтобы поля, которые являются зарезервированными словами, не вызывали проблем
— Адам Тейлор

41

Вы можете использовать этот проект: http://code.google.com/p/anywhereindb

Это будет искать все данные во всей таблице.


Больше не работает для PHP7. (mysql_connect устарел в PHP 5.5.0, удален в PHP 7.0.0)
— iDev247

12

Если вы избегаете, stored proceduresкак чума, или не можете сделать это mysql_dumpиз-за разрешений или сталкиваетесь с другими различными причинами.

Я хотел бы предложить трехэтапный подход, как это:

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 или БД, если это необходимо, или для запуска 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. Вы обеспокоены тем, чтобы вызывать Table-lock (следите за вашими клиентскими подключениями)
  2. Вы не уверены в том, что делаете.

  3. Вы пытаетесь разозлить вас, администратор БД. (Вы можете иметь людей за столом с быстротой .)

Ура, Джей; -]


1
Определенно не то, что вы хотите запустить на живом БД, но полезно для определенных задач отладки. Это терпит неудачу, хотя, если тип столбца не сравнивается со строкой. Т.е. столбец int.
— Майкл Тессел

Замечательно, я добавил три альтернативы для поиска по BLOB-объектам, символам или целым числам. Это всего лишь обобщение, и его следует ВСЕГДА использовать с ВНИМАНИЕМ. НИКОГДА о ПРОИЗВОДСТВЕ, как вы уже упоминали, обычно вас увольняют: «Выискиваете скрипты в интернете и не понимаете их, но все же запускаете их», но, эй, так люди учатся трудным путем.
— JayRizzo

8

Я также сделал свой собственный сканер mysql для поиска какой-либо конфигурации wordpress, не смог найти ее и в интерфейсе, и в базе данных, а дампы базы данных были слишком тяжелыми и нечитаемыми. Я должен сказать, что не могу обойтись без этого сейчас.

Он работает как @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
Я получаю эту ошибку: Неустранимая ошибка: необработанное исключение «PDOException» с сообщением «SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL имеется ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с ключом LIKE REPLACE (REPLACE (REPLACE (REPLACE ('180well *', '\\', '\\\\'), '%) ',' в строке 1 '
— LLBBL

6

Это самый простой запрос для извлечения всех столбцов и таблиц.

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

Все таблицы или таблицы с определенной строкой в ​​имени можно найти на вкладке Поиск в phpMyAdmin.

Приятного запроса ... \ ^. ^ /


20
а как насчет значений?
— Мехз

6

Используя MySQL Workbench, легко выбрать несколько таблиц и запустить поиск текста во всех этих таблицах БД ;-)


Спасибо! Первый раз я использовал верстак. Был довольно интуитивно понятен, он указал мне на стол, который мне был нужен, и я смог найти его оттуда.
— Джошмиллер

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) для операции '=' Вы можете это исправить? Спасибо!
— Давуз

6

Это простой способ, который я знаю. Выберите свою БД в PHPMyAdmin и перейдите на вкладку «Поиск» и напишите, что вы хотите найти и где вы будете искать. Выберите все таблицы, если вы будете искать слова из всех таблиц. Тогда «ИДТИ» и посмотрите результат.Я хочу найти слово VCD (бэкдор) из моей Wordpress DB для удаления


5

Я использую HeidiSQL - полезный и надежный инструмент, разработанный для веб-разработчиков, использующих популярный сервер MySQL.

В HeidiSQL вы можете нажать shift + ctrl + f и найти текст на сервере во всех таблицах. Эта опция очень полезна.


+1 Кажется, хорошо справляется со своей работой и является полезным инструментом, который сохраняет ошибки, связанные с некоторыми другими ответами. Также стоит отметить, что он позволяет вам выбирать, в каких базах данных искать.
— Стив Чэмберс

3

Вы могли бы использовать

SHOW TABLES;

Затем получите столбцы в этих таблицах (в цикле) с

SHOW COLUMNS FROM table;

и затем с этой информацией создайте много запросов, которые вы также можете UNION, если вам нужно.

Но это чрезвычайно тяжело для базы данных. Особенно, если вы делаете поиск, как.


SHOW TABLES FROM <db_name>точнее
— владкрас

3

Это решение
а) является только MySQL, никакой другой язык не нужен, и
б) возвращает результаты 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

Я получаю сообщение об ошибке #1243 - Unknown prepared statement handler (stmt) given to EXECUTEпри выполнении запроса в Phpmyadmin для поиска по всей базе данных
— Vicky Dev

@ VickyDev Я знаю, что с твоего вопроса прошло больше года. Сожалею. Тем не менее: я думаю, что-то еще не так в вашем скрипте, так как stmt объявлен в строке выше EXECUTE. Какую версию MySQL вы используете?
— Чонес

2

Я немного изменил ответ Оливье на 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
Четыре проверки значения столбца - не самый простой способ. Вы можете / должны 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, он отображает диалог «инструменты таблицы». Затем выберите то, что вы хотите найти (от полной базы данных до одной таблицы), введите значение «Текст для поиска» и нажмите «Найти». Я нашел это удивительно быстро (870 МБ дБ меньше чем за минуту)


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опции в Navigatorпанели появляется опция под названием Search Table Data. Это открывает окно поиска, где вы заполняете строку поиска и нажимаете кнопку поиска.

Вам нужно выбрать таблицу, в которой вы хотите искать на левой панели. Но если вы удерживаете Shift и выбираете около 10 таблиц одновременно, MySql может обработать это и вернуть результаты в считанные секунды.

Для тех, кто ищет лучшие варианты! :)


В каком приложении вы все это делаете?
— Джон Шнайдер

Он использует приложение Навигатор.
— Дамир Олехар
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.