質問

この質問に似ていますが、MySQL用です...

MySQLで外部キー参照をプログラムで決定するにはどうすればよいですか(InnoDBを想定)?私はほとんどそれらを得ることができます:

SHOW TABLE STATUS WHERE Name = 'MyTableName';

...しかし、残念ながら、この情報の一部が含まれていると思われるコメント列は切り捨てられるため、信頼できません。他の方法が必要です...

C API呼び出し、SQLステートメント、その他何でも満足します。一貫して機能するものが必要です。

注:" SHOW CREATE TABLE MyTableName"の結果の解析も検討しました。声明、しかし私は本当にもっと簡単な何かがあることを望んでいます。

役に立ちましたか?

解決

この情報を取得するためにクエリできる2つのテーブルがあります。 INFORMATION_SCHEMA.TABLE_CONSTRAINTS および INFORMATION_SCHEMA.KEY_COLUMN_USAGE

上にリンクされている後者のページのコメントからのクエリは、求める情報を取得する方法を示しています。

SELECT CONCAT( table_name, '.', column_name, ' -> ', 
  referenced_table_name, '.', referenced_column_name ) AS list_of_fks 
FROM INFORMATION_SCHEMA.key_column_usage 
WHERE referenced_table_schema = 'test' 
  AND referenced_table_name IS NOT NULL 
ORDER BY table_name, column_name;

上記の「 test 」の代わりにスキーマ名を使用します。

他のヒント

ここでは、@ billソリューションよりも少し改善されています:

SELECT CONSTRAINT_SCHEMA AS db,
       CONCAT (
           TABLE_NAME,
           '.',
           COLUMN_NAME,
           ' -> ',
           REFERENCED_TABLE_NAME,
           '.',
           REFERENCED_COLUMN_NAME
       ) AS relationship 
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_NAME = 'your_table_name'
ORDER BY CONSTRAINT_SCHEMA,
         TABLE_NAME,
         COLUMN_NAME;

この場合、" your_table_name"との関係によってフィルタリングしていました。フィールドと関係がどのデータベースからのものであるかを確認します。

INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS を試してください

SELECT TABLE_NAME,
       COLUMN_NAME,
       CONSTRAINT_NAME,
       REFERENCED_TABLE_NAME,
       REFERENCED_COLUMN_NAME 
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_NAME = 'table_name'
      AND TABLE_SCHEMA = 'table_schema';
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top