Retrouver dans une BD Mysql la table où est stockée une information

Retrouver dans une BD Mysql la table où est stockée une information

Jeudi, 16 Mai 2024 Mysql SQL

Face à la question « Mais où est stockée t’elle information ? » et après avoir cherché au petit bonheur dans deux ou trois tables, il peut être utile de mettre en place un petit script de recherche en SQL ...

Souvent, lorsqu’on reprend une base de données, la première chose à faire est un dictionnaire. Ceci peut être long et fastidieux et, parfois, nous n’en avons pas le temps …

Voici un exemple de script de recherche avec Mysql.

Le principe est simple : utiliser la table `COLUMNS` de la base de données `information_schema` pour construire une requête qui va chercher, avec un like, dans TOUTES les colonnes de TOUTES les tables une information.

C’est franchement un peu bourrin et peut vite écrouler la BD si elle est mal foutue ou un peu importante : le mieux est donc de faire ça sur une copie.

// La requête générée va etre longue ... Mieux vaut blinder la longueur des Group_Concat
SET SESSION group_concat_max_len = 10000000;

//  On utilise des variables pour la réutilisabilité 	  
SET @recherche := 'Chaine recherchée';
SET @dans_BD := 'MaBD';
SET @sql := '';

// on construit le script en empilant un group_concat pour les WHERE sur els colonnes et un autre pour chaque table
SELECT CONCAT(GROUP_CONCAT(r SEPARATOR ' UNION ') , ' ORDER by 2 desc')
INTO @sql
FROM ( SELECT CONCAT("SELECT '",TABLE_NAME,"', count(*) from `",TABLE_NAME,"` where ", GROUP_CONCAT(CONCAT("`",COLUMN_NAME,"`", " like '%",@recherche,"%' ")  SEPARATOR ' OR ')) r
	FROM `information_schema`.`COLUMNS` 
	WHERE TABLE_SCHEMA = @dans_BD
	GROUP BY TABLE_NAME ) z;

// on execute le script
PREPARE strQuery FROM @sql;
EXECUTE strQuery; 
Pas de commentaire encore
Recherche