Recherche dans tous les champs de chaque table d'une base de données MySQL
298
Je veux rechercher dans tous les champs de toutes les tables d'une base de données MySQL une chaîne donnée, en utilisant éventuellement la syntaxe comme:
Vous pouvez jeter un œil au information_schemaschéma. Il a une liste de toutes les tables et de tous les champs qui se trouvent dans une table. Vous pouvez ensuite exécuter des requêtes en utilisant les informations que vous avez obtenues de ce tableau.
Les tableaux concernés sont SCHEMATA, TABLES et COLUMNS. Il existe des clés étrangères telles que vous pouvez créer exactement comment les tables sont créées dans un schéma.
ce n'est pas la réponse que je voulais, mais je dois accepter la vérité. : D Merci
RSilva
1
C'est correct, mais la réponse de @Dan Rather a également aidé, car la base de données que je cherchais était configurée de manière obscure et je ne pouvais pas vraiment savoir quel serait le nom de la colonne ou de la table en regardant simplement ...
DrCord
12
information_schemaest une base de données, pas une table. Quelques précisions sur le tableau dans lequel effectuer la recherche information_schemaseraient utiles!
CaptSaltyJack
3
C'est un peu hilarant pour moi que MySql ne fournisse aucun moyen de rechercher toutes les tables. Semble être une option assez rudimentaire
Il s'agit de la manière "standard" (de facto) de rechercher des bases de données entières. J'aime mysqldump -Tqui crée deux fichiers par table dans un répertoire spécifié. J'ai ensuite grep <search> *dans le répertoire, et ce qui est retourné est le fichier tablename.txt ou .sql. Le fichier txt contient les données de la table (délimité par des tabulations, renommer en csv pour ouvrir dans Excel), et le sql contient la définition de la table, vous l'avez deviné: SQL. De cette façon, vous recherchez tout et il est facile de préciser où se trouvent vos données. Cette méthode peut cependant être assez difficile à mettre en œuvre dans certains environnements. Le débordement de pile est très utile ici.
Joel Mellon
Lorsque vous avez un gros SQL, ou peut-être dans les archives - vous pouvez l'ouvrir dans MC directement sur le serveur, puis afficher-> Rechercher
Vitaly Zdanevich
1
Belle suggestion! Mais, cela ne fonctionnera pas si le fichier de vidage de la base de données est vraiment volumineux (situation que j'ai maintenant :))
Boban
207
Si vous avez installé phpMyAdmin, utilisez sa fonction de recherche.
Sélectionnez votre DB
Assurez-vous que vous avez sélectionné une base de données (c'est-à-dire pas une table, sinon vous obtiendrez une boîte de dialogue de recherche complètement différente)
Cliquez sur l'onglet «Rechercher»
Choisissez le terme de recherche que vous souhaitez
Choisissez les tableaux à rechercher
Je l'ai utilisé sur jusqu'à 250 bases de données de table / 10 Go (sur un serveur rapide) et le temps de réponse est tout simplement incroyable.
L'une de nos bases de données est 92,7 Go et cette option fonctionnait très bien. Grande solution
Tricky
5
J'oublie toujours ce que tout phpMyAdmin peut faire. C'est un excellent outil!
Ville
1
Extrêmement rapide et utile dans ma base de données Magento. J'ai trouvé le champ pour les données que je cherchais en quelques secondes, ainsi que toutes les autres tables qui les référençaient.
mtrueblood
1
MySQL Workbench a aussi cette fonctionnalité: "Base de données >> Rechercher les données de la table ..."
matt wilkie
1
Agréable! maintenant, comment remplaceriez-vous la chaîne recherchée dans phpmyadmin?
Pathros
46
Fonction 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;}
Ne fonctionne plus pour PHP7. (mysql_connect déconseillé en PHP 5.5.0, supprimé en PHP 7.0.0)
iDev247
12
Si vous évitez stored procedurescomme la peste ou si vous ne pouvez pas le faire en mysql_dumpraison d'autorisations ou si vous rencontrez d' autres raisons.
Je suggérerais une approche en trois étapes comme celle-ci:
1) Où cette requête crée un tas de requêtes en tant qu'ensemble de résultats.
#=================# 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 AWHERE
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 CAUTIONSELECT
CONCAT('SELECT * FROM ', A.TABLE_SCHEMA,'.', A.TABLE_NAME,' WHERE ', A.COLUMN_NAME,' IN (\'%1234567890%\');')FROM INFORMATION_SCHEMA.COLUMNS AWHERE
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%';
Les résultats devraient ressembler à ceci:
2) Vous pouvez alors juste Right Clicket utiliser laCopy Row (tab-separated)
3) Collez les résultats dans une nouvelle fenêtre de requête et exécutez le contenu de votre cœur.
Détail: j'exclus les schémas système que vous ne voyez généralement pas dans votre plan de travail, sauf si l'option est Show Metadata and Internal Schemascochée.
J'ai fait cela pour fournir un moyen rapide à ANALYZEun hôte ou une base de données entière si nécessaire ou pour exécuter des OPTIMIZEinstructions pour prendre en charge les améliorations de performances.
Je suis sûr qu'il existe différentes façons de procéder, mais voici ce qui fonctionne pour moi:
-- ========================================== 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';
Testé sur la version MySQL: 5.6.23
AVERTISSEMENT: NE PAS EXÉCUTER CECI SI:
Vous souhaitez créer des verrous de table (gardez un œil sur vos connexions client)
Vous n'êtes pas sûr de ce que vous faites.
Vous essayez de vous irriter DBA. (vous pouvez avoir des gens à votre bureau avec la rapidité .)
Certainement pas quelque chose que vous souhaitez exécuter sur une base de données en direct, mais utile pour certaines tâches de débogage. Cela échoue cependant si le type de colonne ne se compare pas à une chaîne. C'est à dire une colonne int.
Michael Thessel
Grand point, j'ai ajouté trois alternatives pour rechercher à travers les blobs, les caractères ou les entiers. Ceci n'est qu'une généralisation et doit TOUJOURS être utilisé avec ATTENTION. JAMAIS sur PRODUCTION comme vous l'avez mentionné, c'est généralement ce qui vous fait virer "Trouver des scripts sur Internet et ne pas les comprendre, mais toujours les exécuter" mais, hé, c'est ainsi que les gens apprennent à la dure.
JayRizzo
8
J'ai également fait mon propre robot mysql pour rechercher une configuration wordpress, je n'ai pas pu le trouver à la fois dans l'interface et la base de données, et les vidages de base de données étaient trop lourds et illisibles. Je dois dire que je ne peux plus m'en passer maintenant.
Il fonctionne comme celui de @Olivier, mais il gère les noms de base de données / tables exotiques et est sûr comme LIKE-joker.
J'obtiens cette erreur: Erreur fatale: exception non interceptée 'PDOException' avec le message 'SQLSTATE [42000]: erreur de syntaxe ou violation d'accès: 1064 Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à la version de votre serveur MySQL pour la bonne syntaxe à utiliser près de 'key LIKE REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (REPLACE (' 180well * ',' \\ ',' \\\\ '),'%) ',' à la ligne 1 '
LLBBL
6
Il s'agit de la requête la plus simple pour récupérer toutes les colonnes et tables
SELECT*FROM information_schema.`COLUMNS` C WHERE TABLE_SCHEMA ='YOUR_DATABASE'
Toutes les tables ou celles avec une chaîne spécifique dans le nom peuvent être recherchées via l'onglet Rechercher dans phpMyAdmin.
En utilisant MySQL Workbench, il est facile de sélectionner plusieurs tables et d'exécuter une recherche de texte dans toutes ces tables de la base de données ;-)
Je vous remercie! C'est la première fois que j'utilise l'établi. Était assez intuitif, il m'a dirigé vers la table dont j'avais besoin et j'ai pu la localiser à partir de là.
joshmiller
6
Bien que cette question soit ancienne, voici comment vous pouvez le faire si vous utilisez mysql workbench 6.3. (Très probablement, cela fonctionne également pour d'autres versions)
Faites un clic droit sur votre schéma et "Rechercher les données de la table", entrez votre valeur et cliquez sur "Démarrer la recherche". C'est tout.
quand je cours CALL findAll('tbl_test','abb'), cette erreur me manque: # 1267 - Mélange illégal de classements (utf8_general_ci, IMPLICIT) et (utf8_unicode_ci, IMPLICIT) pour l'opération '=' Pouvez-vous le corriger? Merci!
Davuz
6
C'est la manière simple que je connais. Sélectionnez votre base de données dans PHPMyAdmin, allez dans l'onglet "Rechercher" et écrivez ce que vous voulez trouver et où vous allez chercher. Sélectionnez tous les tableaux si vous recherchez les mots de tous les tableaux. Ensuite, "GO" et regardez le résultat.
J'utilise HeidiSQL est un outil utile et fiable conçu pour les développeurs Web utilisant le populaire serveur MySQL.
Dans HeidiSQL, vous pouvez appuyer sur shift + ctrl + f et vous pouvez trouver du texte sur le serveur dans toutes les tables. Cette option est très utile.
+1 Semble bien faire le travail et est un outil utile qui permet d'économiser le faff impliqué dans certaines des autres réponses. Il convient également de noter qu'il vous permet de choisir la ou les bases de données dans lesquelles effectuer la recherche.
Steve Chambers
3
Vous pourriez utiliser
SHOW TABLES;
Ensuite, récupérez les colonnes de ces tables (en boucle) avec
SHOW COLUMNS FROMtable;
puis avec ces informations, créez de nombreuses requêtes que vous pouvez également UNION si vous en avez besoin.
Mais c'est extrêmement lourd sur la base de données. Surtout si vous effectuez une recherche COMME.
Cette solution
a) n'est que MySQL, aucun autre langage n'est nécessaire, et
b) retourne les résultats SQL, prêts pour le traitement!
#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;
Pour ces types de solutions, les ajouter habituellement à phpfiddler serait bien pour que les gens puissent y jeter un œil et même commenter votre solution. :)
pal4life
Je reçois une erreur #1243 - Unknown prepared statement handler (stmt) given to EXECUTElorsque j'exécute votre requête dans Phpmyadmin pour la recherche dans la base de données entière
Vicky Dev
@VickyDev Je sais que cela fait plus d'un an que vous avez posé votre question. Désolé. Néanmoins: je pense que quelque chose d'autre ne va pas dans votre script puisque stmt est déclaré dans la ligne au-dessus de EXECUTE. Quelle version de MySQL utilisez-vous?
Chonez
2
J'ai un peu modifié la réponse PHP d'Olivier pour:
imprimer les résultats dans lesquels la chaîne a été trouvée
omettre les tableaux sans résultats
affiche également la sortie si les noms de colonne correspondent à l'entrée de recherche
afficher le nombre total de résultats
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;}
J'ai construit sur une réponse précédente et j'ai ceci, un rembourrage supplémentaire juste pour pouvoir joindre facilement toutes les sorties:
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
Commencez par l'exécuter, puis collez-le et exécutez le résultat (sans modification) et il affichera tous les noms de table et les colonnes où la valeur est utilisée.
Quatre contrôles sur une valeur de colonne ne sont pas le moyen le plus simple. Vous pourriez / devriez WHERE NOT A.TABLE_SCHEMA IN ('mysql', 'innodb', 'performance_schema', 'information_schema')ou même mieux, l'exécuter, vérifier les schémas utilisés et définir le schéma utilisé dans le lieu en excluant tous les autres.
bradbury9
1
je l'ai fait fonctionner. il suffit de changer les variables
$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>";
J'ai fait cela en utilisant HeidiSQL. Ce n'est pas facile à trouver, mais en appuyant sur Ctrl + Maj + F, il affiche la boîte de dialogue "Outils de table". Sélectionnez ensuite ce que vous souhaitez rechercher (base de données complète dans une seule table) et entrez la valeur "Texte à rechercher" et cliquez sur "Rechercher". Je l'ai trouvé étonnamment rapide (870 Mo de dB en moins d'une minute)
Je ne sais pas si c'est uniquement dans les versions récentes, mais un clic droit sur l' Tablesoption dans le Navigatorvolet affiche une option appelée Search Table Data. Cela ouvre une boîte de recherche où vous remplissez la chaîne de recherche et appuyez sur Rechercher.
Vous devez sélectionner le tableau dans lequel vous souhaitez rechercher dans le volet gauche. Mais si vous maintenez la touche Maj enfoncée et sélectionnez 10 tables à la fois, MySql peut gérer cela et retourner des résultats en quelques secondes.
Pour tous ceux qui recherchent de meilleures options! :)
Réponses:
Vous pouvez jeter un œil au
information_schema
schéma. Il a une liste de toutes les tables et de tous les champs qui se trouvent dans une table. Vous pouvez ensuite exécuter des requêtes en utilisant les informations que vous avez obtenues de ce tableau.Les tableaux concernés sont SCHEMATA, TABLES et COLUMNS. Il existe des clés étrangères telles que vous pouvez créer exactement comment les tables sont créées dans un schéma.
la source
information_schema
est une base de données, pas une table. Quelques précisions sur le tableau dans lequel effectuer la rechercheinformation_schema
seraient utiles!Vous pouvez faire une partie
SQLDump
de la base de données (et de ses données) puis rechercher ce fichier.la source
mysqldump -T
qui crée deux fichiers par table dans un répertoire spécifié. J'ai ensuitegrep <search> *
dans le répertoire, et ce qui est retourné est le fichier tablename.txt ou .sql. Le fichier txt contient les données de la table (délimité par des tabulations, renommer en csv pour ouvrir dans Excel), et le sql contient la définition de la table, vous l'avez deviné: SQL. De cette façon, vous recherchez tout et il est facile de préciser où se trouvent vos données. Cette méthode peut cependant être assez difficile à mettre en œuvre dans certains environnements. Le débordement de pile est très utile ici.Si vous avez installé phpMyAdmin, utilisez sa fonction de recherche.
Je l'ai utilisé sur jusqu'à 250 bases de données de table / 10 Go (sur un serveur rapide) et le temps de réponse est tout simplement incroyable.
la source
Fonction PHP:
la source
$mysqli
comme ceci:$mysqli = new mysqli('localhost', 'root', 'hunter2', 'my_database');
$colum
par"`$colum`"
afin que les champs qui sont des mots réservés ne causent pas de problèmesVous pouvez utiliser ce projet: http://code.google.com/p/anywhereindb
Cela va rechercher toutes les données dans toutes les tables.
la source
Si vous évitez
stored procedures
comme la peste ou si vous ne pouvez pas le faire enmysql_dump
raison d'autorisations ou si vous rencontrez d' autres raisons.Je suggérerais une approche en trois étapes comme celle-ci:
1) Où cette requête crée un tas de requêtes en tant qu'ensemble de résultats.
.
.
Les résultats devraient ressembler à ceci:
2) Vous pouvez alors juste
Right Click
et utiliser laCopy Row (tab-separated)
3) Collez les résultats dans une nouvelle fenêtre de requête et exécutez le contenu de votre cœur.
Détail: j'exclus les schémas système que vous ne voyez généralement pas dans votre plan de travail, sauf si l'option est
Show Metadata and Internal Schemas
cochée.J'ai fait cela pour fournir un moyen rapide à
ANALYZE
un hôte ou une base de données entière si nécessaire ou pour exécuter desOPTIMIZE
instructions pour prendre en charge les améliorations de performances.Je suis sûr qu'il existe différentes façons de procéder, mais voici ce qui fonctionne pour moi:
Santé, Jay; -]
la source
J'ai également fait mon propre robot mysql pour rechercher une configuration wordpress, je n'ai pas pu le trouver à la fois dans l'interface et la base de données, et les vidages de base de données étaient trop lourds et illisibles. Je dois dire que je ne peux plus m'en passer maintenant.
Il fonctionne comme celui de @Olivier, mais il gère les noms de base de données / tables exotiques et est sûr comme LIKE-joker.
L'exécution de ce script pourrait produire quelque chose comme:
la source
Il s'agit de la requête la plus simple pour récupérer toutes les colonnes et tables
Toutes les tables ou celles avec une chaîne spécifique dans le nom peuvent être recherchées via l'onglet Rechercher dans phpMyAdmin.
Avoir une bonne requête ... \ ^. ^ /
la source
En utilisant MySQL Workbench, il est facile de sélectionner plusieurs tables et d'exécuter une recherche de texte dans toutes ces tables de la base de données ;-)
la source
Bien que cette question soit ancienne, voici comment vous pouvez le faire si vous utilisez mysql workbench 6.3. (Très probablement, cela fonctionne également pour d'autres versions)
Faites un clic droit sur votre schéma et "Rechercher les données de la table", entrez votre valeur et cliquez sur "Démarrer la recherche". C'est tout.
la source
Voici ma solution pour cela
la source
CALL findAll('tbl_test','abb')
, cette erreur me manque: # 1267 - Mélange illégal de classements (utf8_general_ci, IMPLICIT) et (utf8_unicode_ci, IMPLICIT) pour l'opération '=' Pouvez-vous le corriger? Merci!C'est la manière simple que je connais. Sélectionnez votre base de données dans PHPMyAdmin, allez dans l'onglet "Rechercher" et écrivez ce que vous voulez trouver et où vous allez chercher. Sélectionnez tous les tableaux si vous recherchez les mots de tous les tableaux. Ensuite, "GO" et regardez le résultat.
la source
J'utilise HeidiSQL est un outil utile et fiable conçu pour les développeurs Web utilisant le populaire serveur MySQL.
Dans HeidiSQL, vous pouvez appuyer sur shift + ctrl + f et vous pouvez trouver du texte sur le serveur dans toutes les tables. Cette option est très utile.
la source
Vous pourriez utiliser
Ensuite, récupérez les colonnes de ces tables (en boucle) avec
puis avec ces informations, créez de nombreuses requêtes que vous pouvez également UNION si vous en avez besoin.
Mais c'est extrêmement lourd sur la base de données. Surtout si vous effectuez une recherche COMME.
la source
SHOW TABLES FROM <db_name>
est plus précisCette solution
a) n'est que MySQL, aucun autre langage n'est nécessaire, et
b) retourne les résultats SQL, prêts pour le traitement!
la source
#1243 - Unknown prepared statement handler (stmt) given to EXECUTE
lorsque j'exécute votre requête dans Phpmyadmin pour la recherche dans la base de données entièreJ'ai un peu modifié la réponse PHP d'Olivier pour:
afficher le nombre total de résultats
la source
J'ai construit sur une réponse précédente et j'ai ceci, un rembourrage supplémentaire juste pour pouvoir joindre facilement toutes les sorties:
Commencez par l'exécuter, puis collez-le et exécutez le résultat (sans modification) et il affichera tous les noms de table et les colonnes où la valeur est utilisée.
la source
WHERE NOT A.TABLE_SCHEMA IN ('mysql', 'innodb', 'performance_schema', 'information_schema')
ou même mieux, l'exécuter, vérifier les schémas utilisés et définir le schéma utilisé dans le lieu en excluant tous les autres.je l'ai fait fonctionner. il suffit de changer les variables
la source
J'ai fait cela en utilisant HeidiSQL. Ce n'est pas facile à trouver, mais en appuyant sur Ctrl + Maj + F, il affiche la boîte de dialogue "Outils de table". Sélectionnez ensuite ce que vous souhaitez rechercher (base de données complète dans une seule table) et entrez la valeur "Texte à rechercher" et cliquez sur "Rechercher". Je l'ai trouvé étonnamment rapide (870 Mo de dB en moins d'une minute)
la source
J'ai utilisé Union pour enchaîner les requêtes. Je ne sais pas si c'est le moyen le plus efficace, mais ça marche.
la source
Il y a une belle bibliothèque pour lire toutes les tables, ridona
la source
Je ne sais pas si c'est uniquement dans les versions récentes, mais un clic droit sur l'
Tables
option dans leNavigator
volet affiche une option appeléeSearch Table Data
. Cela ouvre une boîte de recherche où vous remplissez la chaîne de recherche et appuyez sur Rechercher.Vous devez sélectionner le tableau dans lequel vous souhaitez rechercher dans le volet gauche. Mais si vous maintenez la touche Maj enfoncée et sélectionnez 10 tables à la fois, MySql peut gérer cela et retourner des résultats en quelques secondes.
Pour tous ceux qui recherchent de meilleures options! :)
la source