Suchen Sie in allen Feldern aus jeder Tabelle einer MySQL-Datenbank
298
Ich möchte in allen Feldern aus allen Tabellen einer MySQL-Datenbank nach einer bestimmten Zeichenfolge suchen, möglicherweise unter Verwendung der folgenden Syntax:
Sie können einen Blick in das information_schemaSchema werfen. Es enthält eine Liste aller Tabellen und aller Felder in einer Tabelle. Sie können dann Abfragen mit den Informationen ausführen, die Sie aus dieser Tabelle erhalten haben.
Die beteiligten Tabellen sind SCHEMATA, TABLES und COLUMNS. Es gibt Fremdschlüssel, mit denen Sie genau festlegen können, wie die Tabellen in einem Schema erstellt werden.
Dies ist nicht die Antwort, die ich wollte, aber ich muss die Wahrheit akzeptieren. : D Danke
RSilva
1
Dies ist richtig, aber die Antwort von @Dan Rather hat auch geholfen, da die Datenbank, die ich durchgesehen habe, dunkel eingerichtet war und ich nicht herausfinden konnte, wie der Spaltenname oder die Tabelle sicher aussehen würde, wenn ich nur
nachschaue
12
information_schemaist eine Datenbank, keine Tabelle. Eine Klarstellung, in welcher Tabelle gesucht werden soll, information_schemawäre gut!
CaptSaltyJack
3
Es ist irgendwie komisch für mich, dass MySql keine Möglichkeit bietet, alle Tabellen zu durchsuchen. Scheint eine ziemlich rudimentäre Option zu sein
Dies ist die "Standard" -Methode (de facto), um ganze DBs zu durchsuchen. Mir gefällt, mysqldump -Tdass zwei Dateien pro Tabelle in einem bestimmten Verzeichnis erstellt werden. Ich dann grep <search> *in das Verzeichnis, und was zurückgegeben wird, ist die Datei tablename.txt oder .sql. Die txt-Datei enthält die Daten für die Tabelle (durch Tabulatoren getrennt, in CSV umbenennen, um sie in Excel zu öffnen), und die SQL enthält die Tabellendefinition in, Sie haben es erraten: SQL. Auf diese Weise durchsuchen Sie alles und können ganz einfach eingrenzen, wo sich Ihre Daten befinden. In bestimmten Umgebungen kann es jedoch schwierig sein, diese Methode zum Laufen zu bringen. Stapelüberlauf ist hier sehr hilfreich.
Joel Mellon
Wenn Sie großes SQL haben oder vielleicht im Archiv - Sie können es in MC direkt auf dem Server öffnen und dann anzeigen-> Suchen
Vitaly Zdanevich
1
Netter Vorschlag! Aber es wird nicht funktionieren, wenn die Datenbank-Dump-Datei wirklich groß ist (Situation, die ich jetzt habe :))
Boban
207
Wenn Sie phpMyAdmin installiert haben, verwenden Sie die Suchfunktion.
Wählen Sie Ihre Datenbank aus
Stellen Sie sicher, dass Sie eine Datenbank ausgewählt haben (dh keine Tabelle, da sonst ein völlig anderer Suchdialog angezeigt wird).
Klicken Sie auf die Registerkarte "Suchen"
Wählen Sie den gewünschten Suchbegriff
Wählen Sie die zu durchsuchenden Tabellen aus
Ich habe dies für bis zu 250 Tabellen- / 10-GB-Datenbanken (auf einem schnellen Server) verwendet und die Antwortzeit ist geradezu erstaunlich.
Eine unserer Datenbanken ist 92,7 GB groß und diese Option hat einwandfrei funktioniert. Tolle Lösung
Tricky
5
Ich vergesse immer, was alle phpMyAdmin können. Es ist ein großartiges Werkzeug!
Ville
1
Extrem schnell und hilfreich in meiner Magento-Datenbank. Ich habe das Feld für die Daten, nach denen ich gesucht habe, in wenigen Sekunden gefunden und auch alle anderen Tabellen, die darauf verweisen.
Mtrueblood
1
MySQL Workbench hat auch diese Funktion: "Datenbank >> Tabellendaten
durchsuchen
1
Nett! Wie würden Sie nun die gesuchte Zeichenfolge in phpmyadmin ersetzen?
Pathros
46
PHP-Funktion:
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;}
Funktioniert nicht mehr für PHP7. (mysql_connect in PHP 5.5.0 veraltet, in PHP 7.0.0 entfernt)
iDev247
12
Wenn Sie stored proceduresdie Pest meiden oder mysql_dumpaufgrund von Berechtigungen nicht in der Lage sind, dies zu tun, oder wenn Sie auf andere Gründe stoßen.
Ich würde einen dreistufigen Ansatz wie diesen vorschlagen:
1) Wenn diese Abfrage eine Reihe von Abfragen als Ergebnismenge erstellt.
#=================# VAR/CHAR SEARCH
#=================# BE ADVISED USEANYOF 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 USEWITH 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 INDEXONORNOT# 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%';
Die Ergebnisse sollten folgendermaßen aussehen:
2) Sie können dann einfach Right Clickund verwendenCopy Row (tab-separated)
3) Einfügen führt zu einem neuen Abfragefenster und wird nach Herzenslust ausgeführt.
Detail: Ich schließe Systemschemata aus, die normalerweise nicht in Ihrer Workbench angezeigt werden, es sei denn, Sie haben die Option Show Metadata and Internal Schemasaktiviert.
Ich habe dies getan, um bei Bedarf einen schnellen Weg zu ANALYZEeinem gesamten HOST oder einer gesamten Datenbank bereitzustellen oder um OPTIMIZEAnweisungen zur Unterstützung von Leistungsverbesserungen auszuführen .
Ich bin mir sicher, dass es verschiedene Möglichkeiten gibt, dies zu tun, aber hier ist, was für mich funktioniert:
-- ========================================== DYNAMICALLY FIND TABLES AND CREATE A LIST OF QUERIES IN THE RESULTS TO ANALYZE THEMSELECT 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 THEMSELECT CONCAT('OPTIMIZE TABLE ', TABLE_SCHEMA,'.', TABLE_NAME,';')FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA ='dbname';
Getestet auf MySQL Version: 5.6.23
WARNUNG: Führen Sie dies nicht aus, wenn:
Sie haben Bedenken, Tabellensperren zu verursachen (behalten Sie Ihre Client-Verbindungen im Auge).
Sie sind sich nicht sicher, was Sie tun.
Sie versuchen, Ihren DBA zu verärgern. (Sie können haben die Menschen an Ihrem Schreibtisch mit der Schnelligkeit .)
Auf keinen Fall etwas, das Sie auf einer Live-Datenbank ausführen möchten, aber hilfreich für bestimmte Debugging-Aufgaben. Dies schlägt jedoch fehl, wenn der Spaltentyp nicht mit einer Zeichenfolge verglichen wird. Dh eine int-Spalte.
Michael Thessel
Toller Punkt, ich habe drei Alternativen hinzugefügt, um durch Blobs, Zeichen oder Ints zu suchen. Dies ist nur eine Verallgemeinerung und sollte IMMER mit VORSICHT verwendet werden. NIEMALS bei der PRODUKTION, wie Sie bereits erwähnt haben, wird dies normalerweise dazu führen, dass Sie "Skripte im Internet finden und sie nicht verstehen, aber dennoch ausführen", aber hey, so lernen die Leute auf die harte Tour.
JayRizzo
8
Ich habe auch meinen eigenen MySQL-Crawler erstellt, um eine WordPress-Konfiguration zu durchsuchen, konnte sie nicht sowohl in der Benutzeroberfläche als auch in der Datenbank finden, und Datenbank-Dumps waren zu schwer und unlesbar. Ich muss sagen, ich kann jetzt nicht darauf verzichten.
Es funktioniert wie das von @Olivier, verwaltet jedoch exotische Datenbank- / Tabellennamen und ist LIKE-Joker-sicher.
Ich erhalte folgende Fehlermeldung: Schwerwiegender Fehler: Nicht erfasste Ausnahme 'PDOException' mit der Meldung 'SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1064 Sie haben einen Fehler in Ihrer SQL-Syntax. Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, auf die richtige Syntax für die Verwendung in der Nähe von 'key LIKE REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (' 180well * ',' \\ ',' \\\\ ')),'%) ',' in Zeile 1 '
LLBBL
6
Dies ist die einfachste Abfrage, um alle Spalten und Tabellen abzurufen
SELECT*FROM information_schema.`COLUMNS` C WHERE TABLE_SCHEMA ='YOUR_DATABASE'
Alle Tabellen oder Tabellen mit einer bestimmten Zeichenfolge im Namen können über die Registerkarte Suchen in phpMyAdmin durchsucht werden.
Danke dir! Zum ersten Mal habe ich Workbench verwendet. War ziemlich intuitiv, es zeigte mir den Tisch, den ich brauchte und ich konnte ihn von dort aus finden.
Joshmiller
6
Obwohl diese Frage alt ist, erfahren Sie hier, wie Sie dies tun können, wenn Sie die MySQL-Workbench 6.3 verwenden. (Höchstwahrscheinlich funktioniert es auch für andere Versionen)
Klicken Sie mit der rechten Maustaste auf Ihr Schema und "Tabellendaten durchsuchen", geben Sie Ihren Wert ein und klicken Sie auf "Suche starten". Das ist es.
Beim Ausführen fehlt der folgendeCALL findAll('tbl_test','abb') Fehler: # 1267 - Unzulässige Mischung von Kollatierungen (utf8_general_ci, IMPLICIT) und (utf8_unicode_ci, IMPLICIT) für Operation '=' Können Sie das Problem beheben? Vielen Dank!
Davuz
6
Dies ist der einfache Weg, den ich kenne. Wählen Sie Ihre Datenbank in PHPMyAdmin aus, gehen Sie zur Registerkarte "Suchen" und schreiben Sie, was Sie suchen möchten und wo Sie suchen werden. Wählen Sie alle Tabellen aus, wenn Sie die Wörter aus allen Tabellen suchen möchten. Dann "GO" und schauen Sie sich das Ergebnis an.
+1 Scheint die Arbeit gut zu machen und ist ein nützliches Werkzeug, das den Aufwand für einige der anderen Antworten erspart. Erwähnenswert ist auch, dass Sie damit auswählen können, in welchen Datenbanken Sie suchen
Steve Chambers
3
Du könntest benutzen
SHOW TABLES;
Dann holen Sie sich die Spalten in diesen Tabellen (in einer Schleife) mit
SHOW COLUMNS FROMtable;
und dann mit diesen Informationen viele, viele Abfragen erstellen, die Sie bei Bedarf auch UNION können.
Dies ist jedoch extrem belastend für die Datenbank. Insbesondere, wenn Sie eine LIKE-Suche durchführen.
Diese Lösung
a) ist nur MySQL, es wird keine andere Sprache benötigt, und
b) gibt SQL-Ergebnisse zurück, die zur Verarbeitung bereit sind!
#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 allin 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 andexecute the statement
PREPARE stmt FROM@sql;EXECUTE stmt;DEALLOCATE PREPARE stmt;
Für diese Art von Lösung wäre es normalerweise nett, sie zu phpfiddler hinzuzufügen, damit die Leute Ihre Lösung ansehen und sogar kommentieren können. :)
pal4life
Ich #1243 - Unknown prepared statement handler (stmt) given to EXECUTEerhalte eine Fehlermeldung, wenn ich Ihre Abfrage in Phpmyadmin für die Suche in der gesamten Datenbank ausführe
Vicky Dev
@ VickyDev Ich weiß, seit Ihrer Frage ist mehr als ein Jahr vergangen. Es tut uns leid. Trotzdem: Ich denke, in Ihrem Skript stimmt etwas anderes nicht, da stmt in der Zeile über EXECUTE deklariert ist. Welche Version von MySQL verwenden Sie?
Chonez
2
Ich habe die PHP-Antwort von Olivier ein wenig geändert, um:
Drucken Sie die Ergebnisse aus, in denen die Zeichenfolge gefunden wurde
Tabellen ohne Ergebnisse weglassen
Zeigen Sie auch die Ausgabe an, wenn die Spaltennamen mit der Sucheingabe übereinstimmen
Gesamtzahl der Ergebnisse anzeigen
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;}
Ich habe auf einer früheren Antwort aufgebaut und habe diese, einige zusätzliche Auffüllungen, nur um die gesamte Ausgabe bequem verbinden zu können:
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'UNIONSELECT'SELECT '''-- for exact match use: A.COLUMN_NAME, ' LIKE \'Value\' instead
Zuerst führen Sie dies aus, fügen es dann ein und führen das Ergebnis aus (keine Bearbeitung). Es werden alle Tabellennamen und Spalten angezeigt, in denen der Wert verwendet wird.
Vier Überprüfungen eines Spaltenwerts sind nicht der einfachste Weg. Sie können / sollten WHERE NOT A.TABLE_SCHEMA IN ('mysql', 'innodb', 'performance_schema', 'information_schema')oder noch besser, führen Sie es aus, überprüfen Sie die verwendeten Schemas und legen Sie das verwendete Schema im where fest, anstatt alle anderen auszuschließen.
Bradbury9
1
Ich habe das zum Laufen gebracht. Sie müssen nur die Variablen ändern
$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>";
Ich habe dies mit HeidiSQL gemacht. Es ist nicht leicht zu finden, aber durch Drücken von Strg + Umschalt + F wird der Dialog "Tabellenwerkzeuge" angezeigt. Wählen Sie dann aus, was Sie suchen möchten (vollständige Datenbank zu einer einzelnen Tabelle), geben Sie den Wert "Zu suchender Text" ein und klicken Sie auf "Suchen". Ich fand es überraschend schnell (870 MB DB in weniger als einer Minute)
Ich weiß nicht, ob dies nur in den letzten Versionen der Fall ist, aber wenn Sie mit der rechten Maustaste auf die TablesOption im Bereich klicken Navigator, wird eine Option mit dem Namen angezeigt Search Table Data. Dies öffnet ein Suchfeld, in das Sie die Suchzeichenfolge eingeben und auf Suchen klicken.
Sie müssen die Tabelle, in der Sie suchen möchten, im linken Bereich auswählen. Wenn Sie jedoch die Umschalttaste gedrückt halten und 10 Tabellen gleichzeitig auswählen, kann MySql dies verarbeiten und Ergebnisse in Sekunden zurückgeben.
Für alle, die nach besseren Optionen suchen! :) :)
Antworten:
Sie können einen Blick in das
information_schema
Schema werfen. Es enthält eine Liste aller Tabellen und aller Felder in einer Tabelle. Sie können dann Abfragen mit den Informationen ausführen, die Sie aus dieser Tabelle erhalten haben.Die beteiligten Tabellen sind SCHEMATA, TABLES und COLUMNS. Es gibt Fremdschlüssel, mit denen Sie genau festlegen können, wie die Tabellen in einem Schema erstellt werden.
quelle
information_schema
ist eine Datenbank, keine Tabelle. Eine Klarstellung, in welcher Tabelle gesucht werden soll,information_schema
wäre gut!Sie können eine
SQLDump
der Datenbanken (und ihrer Daten) ausführen und dann diese Datei durchsuchen.quelle
mysqldump -T
dass zwei Dateien pro Tabelle in einem bestimmten Verzeichnis erstellt werden. Ich danngrep <search> *
in das Verzeichnis, und was zurückgegeben wird, ist die Datei tablename.txt oder .sql. Die txt-Datei enthält die Daten für die Tabelle (durch Tabulatoren getrennt, in CSV umbenennen, um sie in Excel zu öffnen), und die SQL enthält die Tabellendefinition in, Sie haben es erraten: SQL. Auf diese Weise durchsuchen Sie alles und können ganz einfach eingrenzen, wo sich Ihre Daten befinden. In bestimmten Umgebungen kann es jedoch schwierig sein, diese Methode zum Laufen zu bringen. Stapelüberlauf ist hier sehr hilfreich.Wenn Sie phpMyAdmin installiert haben, verwenden Sie die Suchfunktion.
Ich habe dies für bis zu 250 Tabellen- / 10-GB-Datenbanken (auf einem schnellen Server) verwendet und die Antwortzeit ist geradezu erstaunlich.
quelle
PHP-Funktion:
quelle
$mysqli
so ein:$mysqli = new mysqli('localhost', 'root', 'hunter2', 'my_database');
$colum
mit ,"`$colum`"
so dass Felder , die reservierte Wörter sind , werden nicht zu Problemen führenSie können dieses Projekt verwenden: http://code.google.com/p/anywhereindb
Dadurch werden alle Daten in allen Tabellen durchsucht.
quelle
Wenn Sie
stored procedures
die Pest meiden odermysql_dump
aufgrund von Berechtigungen nicht in der Lage sind, dies zu tun, oder wenn Sie auf andere Gründe stoßen.Ich würde einen dreistufigen Ansatz wie diesen vorschlagen:
1) Wenn diese Abfrage eine Reihe von Abfragen als Ergebnismenge erstellt.
.
.
Die Ergebnisse sollten folgendermaßen aussehen:
2) Sie können dann einfach
Right Click
und verwendenCopy Row (tab-separated)
3) Einfügen führt zu einem neuen Abfragefenster und wird nach Herzenslust ausgeführt.
Detail: Ich schließe Systemschemata aus, die normalerweise nicht in Ihrer Workbench angezeigt werden, es sei denn, Sie haben die Option
Show Metadata and Internal Schemas
aktiviert.Ich habe dies getan, um bei Bedarf einen schnellen Weg zu
ANALYZE
einem gesamten HOST oder einer gesamten Datenbank bereitzustellen oder umOPTIMIZE
Anweisungen zur Unterstützung von Leistungsverbesserungen auszuführen .Ich bin mir sicher, dass es verschiedene Möglichkeiten gibt, dies zu tun, aber hier ist, was für mich funktioniert:
Prost, Jay; -]
quelle
Ich habe auch meinen eigenen MySQL-Crawler erstellt, um eine WordPress-Konfiguration zu durchsuchen, konnte sie nicht sowohl in der Benutzeroberfläche als auch in der Datenbank finden, und Datenbank-Dumps waren zu schwer und unlesbar. Ich muss sagen, ich kann jetzt nicht darauf verzichten.
Es funktioniert wie das von @Olivier, verwaltet jedoch exotische Datenbank- / Tabellennamen und ist LIKE-Joker-sicher.
Das Ausführen dieses Skripts könnte Folgendes ausgeben:
quelle
Dies ist die einfachste Abfrage, um alle Spalten und Tabellen abzurufen
Alle Tabellen oder Tabellen mit einer bestimmten Zeichenfolge im Namen können über die Registerkarte Suchen in phpMyAdmin durchsucht werden.
Habe eine nette Frage ... \ ^. ^ /
quelle
Mit MySQL Workbench ist es einfach, mehrere Tabellen auszuwählen und in all diesen Tabellen der DB nach Text zu suchen ;-)
quelle
Obwohl diese Frage alt ist, erfahren Sie hier, wie Sie dies tun können, wenn Sie die MySQL-Workbench 6.3 verwenden. (Höchstwahrscheinlich funktioniert es auch für andere Versionen)
Klicken Sie mit der rechten Maustaste auf Ihr Schema und "Tabellendaten durchsuchen", geben Sie Ihren Wert ein und klicken Sie auf "Suche starten". Das ist es.
quelle
Hier ist meine Lösung dafür
quelle
CALL findAll('tbl_test','abb')
Fehler: # 1267 - Unzulässige Mischung von Kollatierungen (utf8_general_ci, IMPLICIT) und (utf8_unicode_ci, IMPLICIT) für Operation '=' Können Sie das Problem beheben? Vielen Dank!Dies ist der einfache Weg, den ich kenne. Wählen Sie Ihre Datenbank in PHPMyAdmin aus, gehen Sie zur Registerkarte "Suchen" und schreiben Sie, was Sie suchen möchten und wo Sie suchen werden. Wählen Sie alle Tabellen aus, wenn Sie die Wörter aus allen Tabellen suchen möchten. Dann "GO" und schauen Sie sich das Ergebnis an.
quelle
Ich benutze HeidiSQL ist ein nützliches und zuverlässiges Tool für Webentwickler, die den beliebten MySQL-Server verwenden.
In HeidiSQL können Sie Shift + Strg + F drücken und in allen Tabellen finden Sie Text auf dem Server. Diese Option ist sehr nützlich.
quelle
Du könntest benutzen
Dann holen Sie sich die Spalten in diesen Tabellen (in einer Schleife) mit
und dann mit diesen Informationen viele, viele Abfragen erstellen, die Sie bei Bedarf auch UNION können.
Dies ist jedoch extrem belastend für die Datenbank. Insbesondere, wenn Sie eine LIKE-Suche durchführen.
quelle
SHOW TABLES FROM <db_name>
ist genauerDiese Lösung
a) ist nur MySQL, es wird keine andere Sprache benötigt, und
b) gibt SQL-Ergebnisse zurück, die zur Verarbeitung bereit sind!
quelle
#1243 - Unknown prepared statement handler (stmt) given to EXECUTE
erhalte eine Fehlermeldung, wenn ich Ihre Abfrage in Phpmyadmin für die Suche in der gesamten Datenbank ausführeIch habe die PHP-Antwort von Olivier ein wenig geändert, um:
Gesamtzahl der Ergebnisse anzeigen
quelle
Ich habe auf einer früheren Antwort aufgebaut und habe diese, einige zusätzliche Auffüllungen, nur um die gesamte Ausgabe bequem verbinden zu können:
Zuerst führen Sie dies aus, fügen es dann ein und führen das Ergebnis aus (keine Bearbeitung). Es werden alle Tabellennamen und Spalten angezeigt, in denen der Wert verwendet wird.
quelle
WHERE NOT A.TABLE_SCHEMA IN ('mysql', 'innodb', 'performance_schema', 'information_schema')
oder noch besser, führen Sie es aus, überprüfen Sie die verwendeten Schemas und legen Sie das verwendete Schema im where fest, anstatt alle anderen auszuschließen.Ich habe das zum Laufen gebracht. Sie müssen nur die Variablen ändern
quelle
Ich habe dies mit HeidiSQL gemacht. Es ist nicht leicht zu finden, aber durch Drücken von Strg + Umschalt + F wird der Dialog "Tabellenwerkzeuge" angezeigt. Wählen Sie dann aus, was Sie suchen möchten (vollständige Datenbank zu einer einzelnen Tabelle), geben Sie den Wert "Zu suchender Text" ein und klicken Sie auf "Suchen". Ich fand es überraschend schnell (870 MB DB in weniger als einer Minute)
quelle
Ich habe Union verwendet, um Abfragen zu verknüpfen. Ich weiß nicht, ob es der effizienteste Weg ist, aber es funktioniert.
quelle
Es gibt eine schöne Bibliothek zum Lesen aller Tabellen, Ridona
quelle
Ich weiß nicht, ob dies nur in den letzten Versionen der Fall ist, aber wenn Sie mit der rechten Maustaste auf die
Tables
Option im Bereich klickenNavigator
, wird eine Option mit dem Namen angezeigtSearch Table Data
. Dies öffnet ein Suchfeld, in das Sie die Suchzeichenfolge eingeben und auf Suchen klicken.Sie müssen die Tabelle, in der Sie suchen möchten, im linken Bereich auswählen. Wenn Sie jedoch die Umschalttaste gedrückt halten und 10 Tabellen gleichzeitig auswählen, kann MySql dies verarbeiten und Ergebnisse in Sekunden zurückgeben.
Für alle, die nach besseren Optionen suchen! :) :)
quelle