質問

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

背景 :外部キー制約のあるテーブルを MySql に削除したいと考えていました。それを行うと、次のようになります。

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

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

役に立ちましたか?

解決

まず、あなたのことを調べてください 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';

(に) を追加することもできます。 WHERE 句) という名前のテーブルが複数ある場合 My_Table 異なるスキーマで。

AND TABLE_SCHEMA = 'My_Database';

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

ALTER TABLE My_Table DROP FOREIGN KEY My_Table_Constraint;

参考文献: 1 & 2.

他のヒント

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

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

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;

このクエリの出力を直接実行して、参照テーブルの制約を削除できます。



select concat('ALTER TABLE ' ,CONSTRAINT_SCHEMA,'.',TABLE_NAME,' DROP FOREIGN KEY ' ,CONSTRAINT_NAME ,';' )
from  information_schema.REFERENTIAL_CONSTRAINTS  
where REFERENCED_TABLE_NAME='<<table to be dropped >> ';


ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top