Comment retrouver toutes les relations entre toutes les tables MySQL? Si par exemple, je veux connaître la relation des tables dans une base de données d'environ 100 tables.
Y a-t-il un moyen de le savoir?
La meilleure façon, par programme, est de collecter les données du INFORMATION_SCHEMA.KEY_COLUMN_USAGE table comme suit:
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
Il y a plus d'informations sur les colonnes comme ORDINAL_POSITION qui pourraient être utiles en fonction de votre objectif.
Plus d'informations: http://dev.mysql.com/doc/refman/5.1/en/key-column-usage-table .html
Essaye ça:
select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
Essayer
SÉLECTIONNER
`TABLE_NAME`,
`COLUMN_NAME`,
`REFERENCED_TABLE_NAME`,
`REFERENCED_COLUMN_NAME`
DE `information_schema`.`KEY_COLUMN_USAGE`
OERE `CONSTRAINT_SCHEMA` = 'VOTRE_NOM_DATABASE' ET
`REFERENCED_TABLE_SCHEMA` IS NOT NULL AND
`REFERENCED_TABLE_NAME` IS NOT NULL AND
`REFERENCED_COLUMN_NAME` IS NOT NULL
n'oubliez pas de remplacer YOUR_DATABASE_NAME par le nom de votre base de données!
Une méthode rapide pour visualiser les relations dans MySQL consiste à effectuer une rétro-ingénierie de la base de données avec MySQL Workbench .
Cela peut également être fait en utilisant l'ingénierie inverse, ce qui entraînera un diagramme de relation d'entité semblable au suivant (bien que vous deviez peut-être l'organiser vous-même, une fois qu'il est généré):
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
;
vous pouvez utiliser:
SHOW CREATE TABLE table_name;
1) Allez dans votre base de données:use DATABASE;
2) Affichez tous les tableaux:show tables;
3) Regardez chaque colonne du tableau pour rassembler ce qu'il fait et ce qu'il est fait:describe TABLENAME;
4) Décrire, c'est bien car vous pouvez comprendre exactement ce que font vos colonnes de table, mais si vous souhaitez regarder de plus près les données elles-mêmes: select * from TABLENAME
Si vous avez de grandes tables, alors chaque ligne a généralement un id
, auquel cas j'aime le faire pour obtenir juste quelques lignes de données et ne pas avoir le terminal débordé:select * from TABLENAME where id<5
- Vous pouvez mettre ici n'importe quelle condition.
Cette méthode vous donne plus d'informations que simplement select * from INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
, et il vous fournit également à chaque fois des informations plus petites.
MODIFIER
Comme le suggéraient les commentaires, ce qui précède WHERE id < 5
était un mauvais choix comme espace réservé conditionnel. Ce n'est pas une bonne idée de limiter par numéro d'identification, d'autant plus que l'identifiant n'est généralement pas digne de confiance pour être séquentiel. Ajouter LIMIT 5
à la fin de la requête.
Une option est: vous pouvez faire de l'ingénierie inverse pour le comprendre de manière schématique.
Lorsque vous installez MySQL, vous obtiendrez MySQLWorkbench. Vous devez l'ouvrir et choisir la base de données que vous souhaitez inverser. Cliquez sur l'option Reverse engineering quelque part que vous trouverez sous le menu Outils ou Base de données. Il vous demandera de choisir les tables. Soit vous sélectionnez les tables que vous souhaitez comprendre, soit vous choisissez la base de données entière. Il va générer un diagramme avec des relations.