Je travaille sur une base de données MySQL énorme (environ 120 tables). J'essaie d'en faire un sens et cela aidera beaucoup si je peux rechercher les 120 tables + colonnes pour une chaîne que je cherche. P>
est-ce possible à faire sur un dB mysql? p>
5 Réponses :
Il y a une solution, ce qui pourrait ne pas être ce que vous voulez. Si vous avez largué la table dans un fichier (mysqldump) avec les données, vous seriez en mesure de grep toutes les informations que vous avez recherchées. P>
Il supprimerait la nécessité de rechercher des requêtes de recherche de temps et est la solution la plus efficace que je puisse penser. P>
Voir la réponse à partir de @arun - Si vous ajoutez --Extendance-Insérer à MySqldump, vous obtiendrez un insert par ligne, ce qui facilite la recherche de quelque chose avec Grep
Je voulais juste ajouter à la réponse d'Omnipresent, qui est la façon de facto de rechercher un dB.
Malheureusement, 99% du temps, ma DB est énorme et une décharge moyenne contient peu de nouvelles lignes, ce qui signifie greffing pour le chaîne que je veux retourne la grande majorité du fichier SQL. p>
Je préfère maintenant utiliser le commutateur --TAB qui fait un fichier TXT délimité par tabulation par table dans un DB. P>
Ceci signifie non seulement que je reçois un enregistrement par ligne, mais je peux rapidement obtenir la table mon mandat de recherche est dans. p>
Essayez ceci: p>
users.sql users.txt orders.sql orders.txt
dans des machines UNIX, si la base de données n'est pas trop grosse:
mysqldump -u <username> -p <password> <database_name> --extended=FALSE | grep <String to search> | less -S
Cela vous aidera à trouver une chaîne dans une base de données complète
DELIMITER ## CREATE PROCEDURE sp_search1(IN searchstring INT) BEGIN DECLARE done INT DEFAULT FALSE; DECLARE output TEXT; DECLARE table_name TEXT; DECLARE column_name TEXT; DECLARE s TEXT; DECLARE searchcursor CURSOR FOR SELECT table_name,column_name FROM information_schema.columns AS column ORDER BY table_name,ordinal_position; OPEN searchcursor; PREPARE stmt2 FROM 'select * from ? where ? = ?' ; search_loop : LOOP IF done THEN LEAVE search_loop; END IF; FETCH searchcursor INTO table_name,column_name; IF( EXECUTE stmt2 USING table_name, column_name,searchstring) THEN INSERT INTO `table_names`(`table_name`) VALUES(@table_name); END IF; END LOOP; END;
Dans votre code ... Comment "fait" est-il défini pour qu'il quitte? Devrait-il y avoir un autre sur le si de se coucher? Très beau morceau de code, BTW.
Vous pouvez simplement itérer chaque table:
Voulez-vous cela dans Pure MySQL? Si oui, je ne pense pas qu'il y ait une chance ..
Dupliqué possible de Rechercher dans tous les champs de chaque table d'une base de données MySQL