Pregunta ¿Cómo encontrar todas las tablas en MySQL con nombres de columna específicos en ellas?


Tengo 2-3 nombres de columna diferentes que quiero buscar en todo el DB y enlistar todas las tablas que tienen esas columnas. ¿Algún guión fácil?


667
2017-10-11 07:02


origen


Respuestas:


Para obtener todas las tablas con columnas columnA o ColumnB en la base de datos 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



Más simplemente hecho en una línea 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



En una versión que no tiene information_schema (versiones anteriores, o algunos ndb) puede volcar la estructura de la tabla y buscar la columna manualmente.

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

Ahora busca el nombre de la columna en some_file.sql usando su editor de texto preferido, o use algunas ingeniosas secuencias de comandos awk.


Y un simple script sed para encontrar la columna, simplemente reemplace COLUMN_NAME con tigo:

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,

Puede canalizar el volcado directamente en sed, pero eso es trivial.


14
2017-08-14 13:01



Para aquellos que buscan lo contrario de esto, es decir, que buscan tablas que no contienen un cierto nombre de columna, aquí está la consulta ...

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');

Esto fue muy útil cuando comenzamos a implementar lentamente el uso de InnoDB especial ai_col columna y necesitaba averiguar cuál de nuestras 200 tablas aún no se había actualizado.


6
2017-08-20 10:06



Si tu quieres "Para obtener todas las tablas solamente", Luego usa esta consulta:

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

Si tu quieres "Para obtener todas las tablas con Columnas", Luego usa esta consulta:

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



Utilice esta consulta de una línea, reemplace nombre_columna_acabado por su nombre de columna.

SELECT TABLE_NAME FROM information_schema.columns WHERE column_name = 'desired_column_name';

2
2017-09-19 15:44



SELECT DISTINCT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME LIKE '%city_id%' AND TABLE_SCHEMA='database'

0
2018-05-17 05:50