mysql - uma - procurar um valor em todas as tabelas sql




Como encontrar todas as tabelas no MySQL com nomes de coluna específicos nelas? (6)

Mais simplesmente feito em uma linha de SQL:

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

Eu tenho 2-3 nomes de colunas diferentes que eu quero procurar em todo o banco de dados e listar todas as tabelas que têm essas colunas. Qualquer script fácil?


Na versão que não tem o information_schema (versões mais antigas, ou alguns ndb's) você pode descarregar a estrutura da tabela e pesquisar a coluna manualmente.

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

Agora, procure o nome da coluna em some_file.sql usando seu editor de texto preferido ou use alguns scripts awk bacanas.

E um script sed simples para encontrar a coluna, basta substituir COLUMN_NAME pelo seu:

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,

Você pode canalizar o despejo diretamente no sed, mas isso é trivial.


Se você quiser " Para obter todas as tabelas apenas ", use esta consulta:

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

Se você quiser " Para obter todas as tabelas com colunas ", use esta consulta:

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

Use esta consulta de uma linha, substitua desired_column_name pelo nome da sua coluna.

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

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

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




information-schema