Dica comando sql para pesquisar dependência de colunas entre tabelas

Weverton Johnnys

Autor Weverton Johnnys
Data de criação Aug 15, 2021
Última edição Modificado há 3 anos
Visualizações 2 visualizações

Um comando útil que utilizei em uma conversão de um banco de dados, pode ser útil em algum momento do dia a dia.

Hoje o sistema não trabalha com FK por isso não, é fácil identificar pela tabela suas relações e dependências.

Porém existe uma nomenclatura padrão para essa referencias que quase sempre é, a palavra “Codigo“ + “nome da tabela“

por exemplo, a conta possui uma loja, então o campo que o identifica como FK é o “CodigoLoja” , (para loja existem as variações mais comuns de codigoempresa e codigole) quanto a codigolojaorigem ou destino, o comando já irá achar pois o critério basta conter o inicio desta palavra.

Ficar atento para substituir o nome do banco de dados, neste caso ainda gerei um SQL, para eu utiliza-lo verificando se existiam registros vínculos a loja de código 2, este comando pode ser utilizado, só trocar o seu valor.

veja o exemplo a baixo, utilizei o comando para pesquisar onde continha qualquer dependência para loja, porém pode ser utilizado para fazer qualquer pesquisa.

SELECT
	tb_col.TABLE_NAME,tb_col.COLUMN_NAME, CONCAT(tb_col.TABLE_NAME,'.',tb_col.COLUMN_NAME) as coluna,
	CONCAT(
		'SELECT * FROM ',
		tb_col.TABLE_NAME,
		' WHERE ',
		tb_col.TABLE_NAME,
		'.',
		tb_col.COLUMN_NAME,
		' = 2',
		' LIMIT 1;'
	) as consulta
FROM
	information_schema.`COLUMNS` tb_col 
	INNER JOIN information_schema.`TABLES` tb_table on tb_table.TABLE_NAME = tb_col.TABLE_NAME
WHERE
	(
		(
			tb_col.TABLE_SCHEMA = 'testecentral' AND tb_table.TABLE_SCHEMA = 'testecentral'
		)
	AND
		(
			tb_col.COLUMN_NAME REGEXP "codigoloja" 
			OR tb_col.COLUMN_NAME REGEXP 'codigoempresa'
			OR tb_col.COLUMN_NAME REGEXP 'codigole'
		)
	AND 
		(
			tb_col.TABLE_NAME NOT REGEXP 'atl_vw_'
			AND tb_table.TABLE_ROWS > 0
		)
	);

como resultado deste comando tivemos os seguintes registros