9
votes

façon de rechercher une base de données complète pour une chaîne dans mysql

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.

est-ce possible à faire sur un dB mysql?


2 commentaires

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


5 Réponses :


20
votes

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.

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.


1 commentaires

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



1
votes

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


0 commentaires

0
votes

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


0 commentaires

3
votes

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;


1 commentaires

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.



0
votes

Vous pouvez simplement itérer chaque table: xxx


0 commentaires