Question Comment trouver toutes les tables dans MySQL avec des noms de colonnes spécifiques?


J'ai 2 ou 3 noms de colonnes différents que je veux rechercher dans la base de données entière et énumérer toutes les tables qui ont ces colonnes. Un script facile?


667
2017-10-11 07:02


origine


Réponses:


Pour obtenir toutes les tables avec des colonnes columnA ou ColumnB dans la base de données YourDatabase:

SELECT DISTINCT TABLE_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS
    WHERE COLUMN_NAME IN ('columnA','ColumnB')
        AND TABLE_SCHEMA='YourDatabase';

1101
2017-10-11 08:42



SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLUMN_NAME LIKE '%wild%';

123
2017-10-11 07:06



Plus simplement fait dans une ligne de SQL:

SELECT * FROM information_schema.columns WHERE column_name = 'column_name';

36
2017-10-09 10:46



SELECT DISTINCT TABLE_NAME, COLUMN_NAME  
FROM INFORMATION_SCHEMA.COLUMNS  
WHERE column_name LIKE 'employee%'  
AND TABLE_SCHEMA='YourDatabase'

29
2017-12-11 03:37



Dans la version qui n'a pas information_schema (versions plus anciennes, ou certains ndb) vous pouvez vider la structure de la table et rechercher la colonne manuellement.

mysqldump -h$host -u$user -p$pass --compact --no-data --all-databases > some_file.sql

Maintenant, recherchez le nom de la colonne dans some_file.sql en utilisant votre éditeur de texte préféré, ou utilisez des scripts awk astucieux.


Et un simple script sed pour trouver la colonne, il suffit de remplacer NOM DE COLONNE avec votre:

sed -n '/^USE/{h};/^CREATE/{H;x;s/\nCREATE.*\n/\n/;x};/COLUMN_NAME/{x;p};' <some_file.sql
USE `DATABASE_NAME`;
CREATE TABLE `TABLE_NAME` (
  `COLUMN_NAME` varchar(10) NOT NULL,

Vous pouvez diriger la sauvegarde directement dans sed mais c'est trivial.


14
2017-08-14 13:01



Pour ceux qui recherchent l'inverse de ceci, c'est-à-dire recherchant des tables qui ne contiennent pas un certain nom de colonne, voici la requête ...

SELECT DISTINCT TABLE_NAME FROM information_schema.columns WHERE 
TABLE_SCHEMA = 'your_db_name' AND TABLE_NAME NOT IN (SELECT DISTINCT 
TABLE_NAME FROM information_schema.columns WHERE column_name = 
'column_name' AND TABLE_SCHEMA = 'your_db_name');

Cela est vraiment utile lorsque nous avons commencé à mettre en œuvre lentement l'utilisation spéciale de InnoDB ai_col colonne et nécessaire de comprendre laquelle de nos 200 tables devait encore être mis à jour.


6
2017-08-20 10:06



Si tu veux "Pour obtenir toutes les tables uniquement", Puis utilisez cette requête:

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME like '%'
and TABLE_SCHEMA = 'tresbu_lk'

Si tu veux "Pour obtenir toutes les tables avec des colonnes", Puis utilisez cette requête:

SELECT DISTINCT TABLE_NAME, COLUMN_NAME  
FROM INFORMATION_SCHEMA.COLUMNS  
WHERE column_name LIKE '%'  
AND TABLE_SCHEMA='tresbu_lk'

4
2017-12-11 12:42