Recherche dans tous les champs de toutes les tables d'une base de données MySQL
Je recherche dans tous les champs de toutes les tables d'une base de données MySQL une chaîne de caractères, éventuellement à l'aide de la syntaxe comme:
SELECT * FROM * WHERE * LIKE '%stuff%'
Est-il possible de faire quelque chose comme cela?
- Ce blog pourrait être utile: winashwin.wordpress.com/2012/08/28/mysql-search
Vous devez vous connecter pour publier un commentaire.
Vous pouvez regarder dans le
information_schema
schéma. Il a une liste de toutes les tables et tous les champs dans une table. Vous pouvez alors exécuter des requêtes en utilisant les informations que vous avez obtenu à partir de ce tableau.Les tables concernées sont des SCHÉMAS, des TABLEAUX et des COLONNES. Il y a des clés étrangères telles que vous pouvez construire jusqu'exactement comment les tables sont créées dans un schéma.
information_schema
est une base de données, pas une table. Quelques précisions sur la table à la recherche au sein deinformation_schema
serait une bonne chose!information_schema.REFERENCED_COLUMN_NAME
ouinformation_schema.REFERENCED_TABLE_NAME
.information_schema
être utile. J'ai vérifié ici dev.mysql.com/doc/refman/8.0/en/columns-table.html mais je ne pouvais pas trouver quelque chose d'utile.Vous pourriez faire un
SQLDump
de la base de données (et de ses données) puis rechercher le fichier.mysqldump -T
qui crée deux fichiers par table dans un répertoire spécifié. J'ai ensuitegrep <search> *
dans le dir, et ce qui est retourné est le tablename.txt ou .fichier sql. Le fichier txt contient les données de la table (délimités par des tabulations, renommer au format csv pour l'ouvrir dans Excel), et le sql détient la définition de la table, vous l'aurez deviné: SQL. De cette façon, vous êtes à la recherche de tout et il est facile de réduire vers le bas où se trouvent vos données. Cette méthode peut être assez difficile d'obtenir de travail dans certains milieux bien. Débordement de pile est très utile ici.mysqldump somedb | grep somestring
Si vous avez phpMyAdmin installé utiliser son option de Recherche.
J'ai utilisé ce sur jusqu'à 250 table/10 GO de bases de données (sur un serveur rapide) et le temps de réponse n'est rien de moins étonnant.
Vous pouvez utiliser ce projet:
http://code.google.com/p/anywhereindb
Cela va chercher toutes les données de toutes les tables.
Si vous êtes en évitant
stored procedures
comme la peste, ou sont incapables de faire unmysql_dump
en raison d'autorisations, ou dans d'autres diverses raisons.Je propose une approche en trois étapes comme ceci:
1) Où cette requête s'appuie tout un tas de requêtes un ensemble de résultats.
.
.
Résultats devrait ressembler à ceci:
2) Vous pouvez ensuite simplement
Right Click
et l'utilisation de laCopy Row (tab separated)
3) Coller les résultats dans une nouvelle fenêtre de requête et d'exécuter à votre contenu de coeurs.
Détail: je l'exclure du schéma que vous ne pouvez pas l'habitude de voir dans votre établi, sauf si vous avez la possibilité
Show Metadata and Internal Schemas
vérifié.Je l'ai fait pour fournir un moyen rapide de
ANALYZE
l'ensemble d'un HÔTE ou une base de données si nécessaire, ou à exécuterOPTIMIZE
déclarations à l'appui des améliorations de performances.Je suis sûr qu'il y a différents façons vous pouvez aller sur le faire, mais voici ce qui fonctionne pour moi:
Acclamations, Jay ;-]
J'ai aussi fait mon propre mysql robot à la recherche de certains de configuration de wordpress, a été incapable de le trouver à la fois l'interface et la base de données, base de données et décharges ont été trop lourd et illisible. Je dois dire que je ne peux pas faire sans elle maintenant.
Il fonctionne comme celui de @Olivier, mais il parvient exotiques de la base de données des noms de table et c'est COMME-joker-fort.
L'exécution de ce script pourrait quelque chose de sortie:
C'est le plus simple requête à la restauration de toutes les Colonnes et les Tables
Toutes les tables ou celles avec chaîne de caractères dans le nom pourrait être recherché via l'onglet de Recherche dans phpMyAdmin.
Avoir De Belles Requête... \^.^/
De l'utilisation de MySQL Workbench, il est facile de sélectionner plusieurs tables et de lancer une recherche de texte dans toutes les tables de la DB 😉
Je suis d'utilisation HeidiSQL est un outil utile et fiable conçu pour les développeurs web à l'aide de la populaire serveur MySQL.
Dans HeidiSQL vous pouvez appuyer sur maj + ctrl + f et vous trouverez le texte sur le serveur dans toutes les tables. Cette option est très utile.
Voici ma solution pour ce
CALL findAll('tbl_test','abb')
, je m'ennuie de cette erreur: #1267 - Illegal mix de classements (utf8_general_ci,IMPLICITE) et (utf8_unicode_ci,IMPLICITE) de l'opération '=' Pouvez-vous résoudre ce problème? Merci!Bien que cette question est vieux , voici comment vous pouvez le faire si vous utilisez mysql workbench 6.3. ( La plus probable, il fonctionne également pour les autres versions)
Droit de la souris sur votre schéma et de Recherche "table de données" , saisissez votre valeur et appuyez sur "lancer la Recherche". Thats it.
Cette solution
a) n'est MySQL, aucune autre langue, et
b) renvoie les résultats SQL, prêt pour la transformation!
#1243 - Unknown prepared statement handler (stmt) given to EXECUTE
quand je lance votre requête dans Phpmyadmin pour la recherche dans toute la base de donnéesC'est le moyen le plus simple que je connais.
Sélectionnez votre base de données dans PHPMyAdmin, et allez à l'onglet "Recherche" et écrivez ce que vous voulez et où vous serez à la recherche pour. Sélectionnez toutes les tables si vous recherche les mots de toutes les tables. Puis sur "GO" et regardez le résultat.
Vous pouvez utiliser
Puis obtenir les colonnes dans les tables (dans une boucle) avec
et puis avec cette info de créer de nombreux de nombreuses questions que vous pouvez aussi l'UNION si vous avez besoin d'.
Mais c'est extrêmement lourds sur la base de données. Spécialement si vous faites une recherche.
SHOW TABLES FROM <db_name>
est plus précisDumping le fichier SQL est probablement le moyen le plus rapide et le plus rapide pour moi. Également découvert un autre problème, de toute façon..
J'ai modifié le PHP réponse de Olivier un peu d':
afficher le nombre total de résultats
J'ai construit sur un à la réponse précédente et ont de ce, certains rembourrage supplémentaire juste pour être en mesure de facilement rejoindre tous les de sortie:
Première de l'exécuter, puis collez et exécutez le résultat (pas de montage) et il affiche tous les noms de tables et de colonnes où la valeur est utilisée.
WHERE NOT A.TABLE_SCHEMA IN ('mysql', 'innodb', 'performance_schema', 'information_schema')
ou encore mieux, de l'exécuter, vérifier les schémas utilisés, et de définir le schéma utilisé dans le où plutôt à l'exclusion de tous les autres.j'ai obtenu ce travail. vous avez juste besoin de changer les variables
J'ai utilisé de l'Union pour la chaîne de requêtes. Ne sais pas si c'est la façon la plus efficace, mais il fonctionne.
Il y a une belle bibliothèque pour la lecture de toutes les tables, ridona
Je ne sais pas si ce n'est que dans les versions récentes, mais un clic droit sur le
Tables
option dans leNavigator
volet apparaît une option appeléeSearch Table Data
. Cela ouvre un champ de recherche où vous remplissez la chaîne de recherche et lancez la recherche.Vous avez besoin pour choisir la table que vous souhaitez rechercher dans le volet de gauche. Mais si vous maintenez la touche maj enfoncée et sélectionnez comme 10 tables en même temps, MySql peuvent gérer et de retourner des résultats en quelques secondes.
Pour quelqu'un qui est à la recherche de meilleures options! 🙂
Je l'ai fait à l'aide de HeidiSQL.
Il n'est pas facile à trouver, mais en appuyant sur Ctrl+Maj+F affiche la "outils de tableau" le dialogue. Ensuite, sélectionnez ce que vous voulez de recherche (base de données Complète à table unique) et de saisir le Texte à rechercher" la valeur et cliquez sur "Rechercher". Je l'ai trouvé étonnamment rapide (870MiB db en moins d'une minute)
D'exportation de l'ensemble de la base de données et la recherche .fichier sql.
Si vous utilisez
phpMyAdmin
suivre cette réponse, le site cette référence.