una todas tablas tabla recursivas peticiones mostrar listar las jerarquica ejemplos datos consultas consulta campos bases mysql database relationship relation

recursivas - ¿Cómo encontrar todas las relaciones entre todas las tablas mysql?



mostrar todas las tablas en mysql (8)

¿Cómo encontrar todas las relaciones entre todas las tablas de MySQL? Si, por ejemplo, quiero saber la relación de las tablas en una base de datos de alrededor de 100 tablas.

¿Hay alguna forma de saber esto?


1) Entra en tu base de datos:
use DATABASE;

2) Mostrar todas las tablas:
show tables;

3) Mire cada columna de la tabla para recopilar lo que hace y de qué está hecho:
describe TABLENAME;

4) Describir es bueno ya que puedes averiguar exactamente qué hacen tus columnas de la tabla, pero si deseas un select * from TABLENAME más detallado de los datos en sí: select * from TABLENAME
Si tiene tablas grandes, entonces cada fila generalmente tiene un id , en cuyo caso me gusta hacer esto para obtener solo unas pocas líneas de datos y no tener el terminal abrumado:
select * from TABLENAME where id<5 - Puede poner cualquier condición aquí que desee.

Este método le brinda más información que solo haciendo select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS; , y también le proporciona más información en cada bocado.

EDITAR

Como sugirieron los comentarios, la WHERE id < 5 anterior WHERE id < 5 fue una mala elección como marcador de posición condicional. No es una buena idea limitar por número de identificación, especialmente porque la identificación generalmente no es confiable para ser secuencial. Agregue LIMIT 5 al final de la consulta en su lugar.


La mejor manera, hablando programáticamente, es recopilar datos de la tabla INFORMATION_SCHEMA.KEY_COLUMN_USAGE de la siguiente manera:

SELECT `TABLE_SCHEMA`, -- Foreign key schema `TABLE_NAME`, -- Foreign key table `COLUMN_NAME`, -- Foreign key column `REFERENCED_TABLE_SCHEMA`, -- Origin key schema `REFERENCED_TABLE_NAME`, -- Origin key table `REFERENCED_COLUMN_NAME` -- Origin key column FROM `INFORMATION_SCHEMA`.`KEY_COLUMN_USAGE` -- Will fail if user don''t have privilege WHERE `TABLE_SCHEMA` = SCHEMA() -- Detect current schema in USE AND `REFERENCED_TABLE_NAME` IS NOT NULL; -- Only tables with foreign keys

Hay más información de columnas como ORDINAL_POSITION que podría ser útil dependiendo de su propósito.

Más información: http://dev.mysql.com/doc/refman/5.1/en/key-column-usage-table.html


Prueba esto:

select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS;


Tratar

SELECCIONAR
`TABLE_NAME`,
`COLUMN_NAME`,
`REFERENCED_TABLE_NAME`,
`REFERENCED_COLUMN_NAME`
DESDE `information_schema``KEY_COLUMN_USAGE`
DONDE `CONSTRAINT_SCHEMA` = ''YOUR_DATABASE_NAME'' Y
`REFERENCED_TABLE_SCHEMA` NO ES NULO Y
`REFERENCED_TABLE_NAME` NO ES NULO Y
`REFERENCED_COLUMN_NAME` NO ES NULO

¡No olvide reemplazar YOUR_DATABASE_NAME con el nombre de su base de datos!


Un método rápido de visualización de relaciones en MySQL es la ingeniería inversa de la base de datos con MySQL Workbench .

Esto también se puede hacer usando la ingeniería inversa, lo que dará como resultado un diagrama de relación de entidad muy similar al siguiente (aunque es posible que tenga que organizarlo una vez que se genere):


Una opción es: puede hacer ingeniería inversa para entenderlo de forma esquemática.

Cuando instale MySQL, obtendrá MySQLWorkbench. Debe abrirlo y elegir la base de datos que desea aplicar ingeniería inversa. Haga clic en la opción Ingeniero inverso en algún lugar que encuentre debajo de las herramientas o el menú Base de datos. Te pedirá que elijas las tablas. Seleccione las tablas que desee comprender o elija la base de datos completa. Se generará un diagrama con las relaciones.


puedes usar:

SHOW CREATE TABLE table_name;


SELECT count(1) totalrelationships , c.table_name tablename, CONCAT('' '',GROUP_CONCAT(c.column_name ORDER BY ordinal_position SEPARATOR '', '')) columnname, CONCAT('' '',GROUP_CONCAT(c.column_type ORDER BY ordinal_position SEPARATOR '', '')) columntype FROM information_schema.columns c RIGHT JOIN (SELECT column_name , column_type FROM information_schema.columns WHERE -- column_key in (''PRI'',''MUL'') AND -- uncomment this line if you want to see relations only with indexes table_schema = DATABASE() AND table_name = ''YourTableName'') AS p USING (column_name,column_type) WHERE c.table_schema = DATABASE() -- AND c.table_name != ''YourTableName'' GROUP BY tablename -- HAVING (locate('' YourColumnName'',columnname) > 0) -- uncomment this line to search for specific column ORDER BY totalrelationships desc, columnname ;