web-dev-qa-db-fra.com

Afficher toutes les contraintes de clé étrangère pour l'ensemble de la base de données MySQL

J'ai une grande base de données avec plus de 150 tables que j'ai récemment reçu. Je me demande simplement s'il existe un moyen simple d'afficher toutes les contraintes de clé étrangère pour l'ensemble de la base de données plutôt que sur chaque table.

37
Scott Wolf

Vous pouvez utiliser les tables INFORMATION_SCHEMA pour cela. Par exemple, le INFORMATION_SCHEMA TABLE_CONSTRAINTS table.

Quelque chose comme ça devrait le faire:

select *
from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
where CONSTRAINT_TYPE = 'FOREIGN KEY'
64
RedFilter

C'est ce que je préfère obtenir des informations utiles:

SELECT CONSTRAINT_NAME,
       UNIQUE_CONSTRAINT_NAME, 
       MATCH_OPTION, 
       UPDATE_RULE,
       DELETE_RULE,
       TABLE_NAME,
       REFERENCED_TABLE_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
WHERE CONSTRAINT_SCHEMA = 'your_database_name'
12
genespos

La réponse actuellement acceptée par l'utilisateur RedFilter fonctionnera correctement si vous ne possédez qu'une base de données, mais pas si vous en avez plusieurs.

Après avoir entré use information_schema;, utilisez cette requête pour obtenir les clés étrangères pour name_of_db:

select * from `table_constraints` where `table_schema` like `name_of_db` and `constraint_type` = 'FOREIGN KEY'

Utilisez cette requête pour obtenir des clés étrangères pour name_of_db enregistrées dans un fichier enregistrable: output_filepath_and_name:

select * from `table_constraints` where `table_schema` like "name_of_db" and `constraint_type` = 'FOREIGN KEY' into outfile "output_filepath_and_name" FIELDS TERMINATED BY ',' ENCLOSED BY '"';
6
Buttle Butkus

Interroger ce code

select constraint_name,
   table_schema,
   table_name
from   information_schema.table_constraints

Vous obtiendrez nom_contrainte et filtrerez le schéma_table qui est la liste de database.

Regarde ça

1
user3673263

SQL:

select constraint_name,
       table_schema,
       table_name
from   information_schema.table_constraints
where  constraint_schema = 'astdb'

Sortie:

+----------------------------+--------------+---------------------+
| constraint_name            | table_schema | table_name          |
+----------------------------+--------------+---------------------+
| PRIMARY                    | astdb        | asset_category      |
| PRIMARY                    | astdb        | asset_type          |
| PRIMARY                    | astdb        | asset_valuation     |
| PRIMARY                    | astdb        | assets              |
| PRIMARY                    | astdb        | com_mst             |
| PRIMARY                    | astdb        | com_typ             |
| PRIMARY                    | astdb        | ref_company_type    |
| PRIMARY                    | astdb        | supplier            |
| PRIMARY                    | astdb        | third_party_company |
| third_party_company_ibfk_1 | astdb        | third_party_company |
| PRIMARY                    | astdb        | user                |
| PRIMARY                    | astdb        | user_role           |
+----------------------------+--------------+---------------------+
0
Nisar