web-dev-qa-db-ja.com

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

MySqlのテーブルに関連する外部キーを確認するにはどうすればよいですか?

Background:外部キー制約のあるMySqlにテーブルをドロップしたかった。私がそれをするとき、私はこれを手に入れます:

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

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

48
xameeramir

まず、あなたの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

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

AND TABLE_SCHEMA = 'My_Database';
66
Vérace

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

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
2
syed umar

MySql 5.7。テーブルの関係と関係ルールを見つけることができます。

SELECT
  DISTINCT a.TABLE_NAME,
  a.CONSTRAINT_NAME,
  b.DELETE_RULE,
  b.UPDATE_RULE,
  a.REFERENCED_TABLE_NAME,
  a.COLUMN_NAME,
  a.REFERENCED_COLUMN_NAME,
  a.TABLE_SCHEMA
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE a
JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS b USING (CONSTRAINT_NAME)
WHERE
    a.TABLE_SCHEMA = "DATABASE_NAME" AND
    a.REFERENCED_TABLE_NAME = 'TABLE_NAME'
ORDER BY a.TABLE_NAME ASC;
1
M. Hamza Rajput