7
votes

Détail des contraintes de l'information_schema (sur la mise à jour de la cascade, sur Supprimer restreindre)

Presque toutes les informations que j'avais besoin d'une base de données, je pouvais trouver dans Information_schema

Cette fois, je devais lire des détails sur toutes les clés étrangères dans une base de données via une seule requête forte> j'ai trouvé tout Dans INFORMATION_SCHEMA.KEY_COLUMN_USAGE, mais n'a pas pu trouver les contraintes comme sur Supprimer, sur la mise à jour code> p>

i peut faire show créer une table code> pour toutes les tables individuelles. Mais existe-t-il un moyen d'obtenir ces détails via une question de sélection comme celle-ci? P>

SELECT CONSTRAINT_NAME, TABLE_NAME,COLUMN_NAME, REFERENCED_TABLE_NAME, 
REFERENCED_COLUMN_NAME FROM information_schema.`KEY_COLUMN_USAGE` WHERE 
table_schema = 'mydbname' AND referenced_column_name IS NOT NULL


7 commentaires

Avez-vous essayé la colonne supplémentaire ?


@njk il n'existe pas dans key_column_usage .


Il existe dans la table de colonnes. Je l'avais essayé mais j'ai maintenant un coup d'œil pour ces détails, mais il contient simplement des informations sur Auto_Increment et non pour ces contraintes.


La documentation indique qu'il devrait y avoir une table informations_schema.reférentialien_constraints . Mais je ne le vois pas.


@Barmar Je me rends compte que je suis en retard à la fête, mais je viens de vérifier et référential_constraints apparaît à la version 5.6.17 pour moi. Les docs disent que cela a été ajouté au 5.1.10, peut-être que vous utilisiez une version plus ancienne?


@ m. Ressemble à un problème de sensibilité de cas. La table est référential_constraints , je cherchais référential_constraints .


@Barmar Ah, bien sûr, toutes les tables d'informations_schema sont majuscules, mais depuis que j'utilise Navicat, cela ne m'a pas fait de différence pour moi.


4 Réponses :


0
votes

Si vous recherchez (primaire | étrangère | unique) clés:

http://dev.mysql.com/ DOC / REFMAN / 5.5 / FR / TABLE-CONTRAINTS-TABLE.HTML


1 commentaires

Merci pour la réponse. Où je sais loin, sur Supprimer et sur la mise à jour est utilisé avec contraintes de clé étrangère par exemple. E.G. sur Supprimer cascade . Les déclencheurs ont une syntaxe comme avant de supprimer ou après la mise à jour et non sur la mise à jour . Je suis juste à la recherche de sur la mise à jour et sur Supprimer utilisé avec des clés étrangères comme Contraintes d'intégrité référentielle



1
votes

update à partir de informations_schema.reférentialien_constraints Table Ajouter dans mysql 5.1 MYSQL-5.1 Nous pouvons obtenir des informations sur toutes les contraintes **. La réponse acceptée donne la solution en tant que requête.

plus tôt Avant MySQL 5.1 comme MYSQL-5.0 , nous Impossible d'obtenir cette information, nous ne pouvions utiliser que show créer une table pour une table individuelle.


0 commentaires

0
votes

Maintenant, vous pouvez trouver des détails de la contrainte de clé étrangère dans le tableau Information_schema.reférentialien_constraints

http://dev.mysql.com /doc/refman/5.5/fr/reférential-ConstraintS-Table.html


0 commentaires

12
votes

update_rule et delete_rule est la chose que vous avez demandée

C'est un peu trop tard, mais cela pourrait aider quelqu'un d'autre, ici la solution: xxx


2 commentaires

Exactement ce que j'ai demandé et serait utile pour les autres


Vous devriez utiliser "sur tb1.constraintore_name = tb2.constraint_name et tb1.table_schema = tb2.constraint_schema et tb1.table_name = tb2.table_name" Pour la joindre comme nom de contrainte n'est pas unique