문제

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