MySQL:テーブルに関連する外部キーを確認する方法


43

MySqlのテーブルに関連する外部キーを表示する方法は?

背景:外部キー制約を持つテーブルをMySqlにドロップしたかった。私がそれをするとき、私はこれを得る:

Error Code: 1217. Cannot delete or update a parent row: a foreign key constraint fails

他のテーブルを残すテーブルに関連する外部キーを削除するにはどうすればよいですか。

回答:


55

まず、FOREIGN KEY次の方法で制約名を見つけます。

SELECT
  TABLE_NAME,
  COLUMN_NAME,
  CONSTRAINT_NAME,   -- <<-- the one you want! 
  REFERENCED_TABLE_NAME,
  REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
  REFERENCED_TABLE_NAME = 'My_Table';

そして、次の方法で名前付き制約を削除できます。

ALTER TABLE My_Table DROP FOREIGN KEY My_Table_Constraint;

参考文献:12

コメントで@SteffenWinklerが示唆しているように、異なるスキーマ/データベースにその名前のテーブルが複数ある場合は、where句にさらに述語を追加できます。

AND TABLE_SCHEMA = 'My_Database';

1
編集していただきありがとうございます-あなたの質問に+1を付けることでお返しします!:-)
ベレース

16
また、SHOW CREATE TABLE My_Table;
リックジェームズ

2
持っている他のテーブルの制約のみを表示する@RickJames My_Table。質問は、My_Table他のテーブルが持つ制約を求めます。
ADTC

2
これをただちらっと見ているだけの人のために:そのステートメントは、データベースサーバー全体にわたって指定された名前でテーブルを参照するすべての制約をリストします。以下を追加して、関連するデータベースAND TABLE_SCHEMA = 'My_Database';
Steffen Winkler

3

上記のクエリを編集しました。参照テーブル名は参照されているテーブルであるため、参照テーブル名をテーブル名に変更しました。したがって、元のクエリの結果は、テーブルの外部キーを表示しません。

SELECT
  TABLE_NAME,
  COLUMN_NAME,
  CONSTRAINT_NAME,   -- <<-- the one you want! 
  REFERENCED_TABLE_NAME,
  REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE
  Table_name = 'case_qualitycontrolcase' and constraint_name = f
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.