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;

참고 문헌 : 1 & 2 .

주석에서 @SteffenWinkler가 제안한 것처럼 다른 스키마 / 데이터베이스에 해당 이름의 테이블이 두 개 이상 있으면 where 절에 술어를 추가 할 수 있습니다.

AND TABLE_SCHEMA = 'My_Database';

1
수정 해 주셔서 감사합니다. 질문을 +1하여 보답하겠습니다. :-)
Vérace

16
또한 SHOW CREATE TABLE My_Table;.
Rick James

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.