Afficher la commande contraintes sur les tables

J’ai des tables sur lesquelles j’ai essayé de définir les relations PK FK, mais je veux vérifier cela. Comment puis-je montrer les contraintes PK / FK? J’ai vu cette page de manuel, mais elle ne montre pas d’exemples et ma recherche Google a également été infructueuse. Ma firebase database est credentialing1 et mes tables contraintes sont des practices et des cred_insurances .

j’utilise

 SHOW CREATE TABLE mytable; 

Cela vous montre l’instruction SQL nécessaire pour recréer mytable dans sa forme actuelle. Vous pouvez voir toutes les colonnes et leurs types (comme DESC ), mais vous y trouverez également des informations sur les contraintes (et le type de tableau, le jeu de caractères, etc.).

Interrogez simplement le INFORMATION_SCHEMA:

 USE INFORMATION_SCHEMA; SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME FROM KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = "" AND TABLE_NAME = "" AND REFERENCED_COLUMN_NAME IS NOT NULL; 

Le principal problème avec la réponse validée est que vous devrez parsingr le résultat pour obtenir les informations. Voici une requête vous permettant de les obtenir de manière plus utilisable:

 SELECT cols.TABLE_NAME, cols.COLUMN_NAME, cols.ORDINAL_POSITION, cols.COLUMN_DEFAULT, cols.IS_NULLABLE, cols.DATA_TYPE, cols.CHARACTER_MAXIMUM_LENGTH, cols.CHARACTER_OCTET_LENGTH, cols.NUMERIC_PRECISION, cols.NUMERIC_SCALE, cols.COLUMN_TYPE, cols.COLUMN_KEY, cols.EXTRA, cols.COLUMN_COMMENT, refs.REFERENCED_TABLE_NAME, refs.REFERENCED_COLUMN_NAME, cRefs.UPDATE_RULE, cRefs.DELETE_RULE, links.TABLE_NAME, links.COLUMN_NAME, cLinks.UPDATE_RULE, cLinks.DELETE_RULE FROM INFORMATION_SCHEMA.`COLUMNS` as cols LEFT JOIN INFORMATION_SCHEMA.`KEY_COLUMN_USAGE` AS refs ON refs.TABLE_SCHEMA=cols.TABLE_SCHEMA AND refs.REFERENCED_TABLE_SCHEMA=cols.TABLE_SCHEMA AND refs.TABLE_NAME=cols.TABLE_NAME AND refs.COLUMN_NAME=cols.COLUMN_NAME LEFT JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS cRefs ON cRefs.CONSTRAINT_SCHEMA=cols.TABLE_SCHEMA AND cRefs.CONSTRAINT_NAME=refs.CONSTRAINT_NAME LEFT JOIN INFORMATION_SCHEMA.`KEY_COLUMN_USAGE` AS links ON links.TABLE_SCHEMA=cols.TABLE_SCHEMA AND links.REFERENCED_TABLE_SCHEMA=cols.TABLE_SCHEMA AND links.REFERENCED_TABLE_NAME=cols.TABLE_NAME AND links.REFERENCED_COLUMN_NAME=cols.COLUMN_NAME LEFT JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS AS cLinks ON cLinks.CONSTRAINT_SCHEMA=cols.TABLE_SCHEMA AND cLinks.CONSTRAINT_NAME=links.CONSTRAINT_NAME WHERE cols.TABLE_SCHEMA=DATABASE() AND cols.TABLE_NAME="table" 

de faire une demande à information_schema vous avez besoin de privilèges. Si vous avez besoin d’une simple liste de clés, vous pouvez utiliser cette commande:

 SHOW INDEXES IN  

Essayez de faire:

 SHOW TABLE STATUS FROM credentialing1; 

Les contraintes de clé étrangère sont répertoriées dans la colonne Commentaire de la sortie.

Vous pouvez utiliser ceci:

 select table_name,column_name,referenced_table_name,referenced_column_name from information_schema.key_column_usage where referenced_table_name is not null and table_schema = 'my_database' and table_name = 'my_table' 

Ou pour une sortie mieux formatée, utilisez ceci:

 select concat(table_name, '.', column_name) as 'foreign key', concat(referenced_table_name, '.', referenced_column_name) as 'references' from information_schema.key_column_usage where referenced_table_name is not null and table_schema = 'my_database' and table_name = 'my_table' 

Analogue à @ Resh32 , mais sans qu’il soit nécessaire d’utiliser l’instruction USE :

 SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA = "database_name" AND TABLE_NAME = "table_name" AND REFERENCED_COLUMN_NAME IS NOT NULL; 

Utile, par exemple en utilisant l’ORM.

Il y a aussi un outil que Oracle a fait appelé mysqlshow

Si vous l’exécutez avec l’ --k keys $table_name les clés seront affichées.

 SYNOPSIS mysqlshow [options] [db_name [tbl_name [col_name]]] ....... ....... ....... · --keys, -k Show table indexes. 

Exemple:

 ╰─➤ mysqlshow -h 127.0.0.1 -u root -p --keys database tokens Database: database Table: tokens +-----------------+------------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+ | Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment | +-----------------+------------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+ | id | int(10) unsigned | | NO | PRI | | auto_increment | select,insert,update,references | | | token | text | utf8mb4_unicode_ci | NO | | | | select,insert,update,references | | | user_id | int(10) unsigned | | NO | MUL | | | select,insert,update,references | | | expires_in | datetime | | YES | | | | select,insert,update,references | | | created_at | timestamp | | YES | | | | select,insert,update,references | | | updated_at | timestamp | | YES | | | | select,insert,update,references | | +-----------------+------------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+ +--------+------------+--------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +--------+------------+--------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | tokens | 0 | PRIMARY | 1 | id | A | 2 | | | | BTREE | | | | tokens | 1 | tokens_user_id_foreign | 1 | user_id | A | 2 | | | | BTREE | | | +--------+------------+--------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+