14

この質問に似ていますが、MySQLの場合....

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

SHOW TABLE STATUS WHERE Name = 'MyTableName';

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

C API 呼び出し、SQL ステートメント、何でも構いません。一貫して機能するものが必要です。

注: 「SHOW CREATE TABLE MyTableName」ステートメントの結果を解析することも検討しましたが、もっと簡単なものがあることを本当に望んでいます。

4

5 に答える 5

29

この情報を取得するために照会できる 2 つのテーブルがあります:INFORMATION_SCHEMA.TABLE_CONSTRAINTSINFORMATION_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上記の「 」の代わりにスキーマ名を使用してください。

于 2008-11-07T22:51:23.980 に答える
7

ここでは、@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」フィールドとの関係でフィルタリングし、関係がどのデータベースからのものかを確認していました。

于 2012-08-08T08:36:06.200 に答える
2

試すINFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS

于 2008-11-07T22:12:46.163 に答える
-1
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';
于 2016-05-31T11:59:20.460 に答える