2012-06-19 2 views
32

MySQL에서 테이블을 삭제하려고합니다.
많은 일을 시도했지만 bericht 테이블을 삭제할 수 없다는 오류가 계속 발생합니다. 외래 키 제약 내가이 테이블을 삭제하려면 어떻게테이블을 삭제할 수 없음 : 외래 키 제약 조건이 실패합니다.

실패 - 삭제하거나 부모 행을 업데이트 할 수 없습니다

# 1217 : 이것은 내가지고있어 오류인가?

+2

외래 키를 통해 다른 테이블이 참조하는 테이블을 찾아서 먼저 해당 테이블에 FK 제약 조건을 삭제 한 다음이 테이블을 삭제하십시오. –

+0

더 이상 원하지 않는 다른 테이블의 요구 사항을 제거해야합니다 – BugFinder

+1

이러한 답변 중 어떤 것이 도움이됩니까? http://stackoverflow.com/questions/1905470/cannot-delete-or-update-a-parent-row-a-foreign-key-constraint-fails http://stackoverflow.com/questions/3334619/delete-or-update-a-parent-row-a-foreign-key-constraint-fails가 실패합니다. –

답변

44

시험해보기 :

SELECT * 
FROM information_schema.KEY_COLUMN_USAGE 
WHERE REFERENCED_TABLE_NAME = 'YourTable'; 

이 표는 당신이 이러한 참조, 또는이 표 참조 데이터 세트 데이터 세트를 삭제하면 당신은 테이블

+4

이 방법이 더 좋습니다. 그것은 안전하고 선택한 대답처럼 나쁜 습관이 아닙니다. – Sloganho

+1

그것은 나를 위해 일했습니다.이 대답은 받아 들여지는 것이어야합니다. – parvez

68

이 무엇을해야 드롭 할 수있을 것입니다, 드롭하려는 테이블에 대한 참조를 가지고있는 당신을 제공한다 트릭 :

SET FOREIGN_KEY_CHECKS=0; DROP TABLE bericht; SET FOREIGN_KEY_CHECKS=1; 

다른 사람들이 지적했듯이, 이것은 질문에서 질문하는 내용 임에도 불구하고 거의 원하는 것이 아닙니다. 더 안전한 해결책은 bericht을 삭제하기 전에 bericht에 따라 테이블을 삭제하는 것입니다. 이를 수행하는 방법에 대한 CloudyMarble 응답을 참조하십시오. 데이터베이스 자체를 삭제하거나 다시 만들지 않으려는 경우 bash와 내 게시물의 메소드를 사용하여 데이터베이스의 모든 테이블을 삭제합니다.

#1217 다른 테이블에 삭제하려고하는 테이블에 외래 키 제약 조건이 있고 InnoDB 데이터베이스 엔진을 사용하고있을 때 오류가 발생합니다. 이 솔루션은 일시적으로 구속을 확인하지 못하게 한 다음 다시 활성화합니다. 더 많은 것을 위해 documentation를 읽으십시오. bericht에 따라 테이블의 외래 키 제한 및 필드를 삭제하십시오. 그렇지 않으면 데이터베이스가 손상된 상태로 남을 수 있습니다.

+2

이것은 대답 – kyeno

+0

을 선택해야합니다. 이제는 가장 좋은 대답이고 맨 위에 있어야합니다 !!!!!! –

+1

그것이 정확하더라도, 이것을하는 것은 놀랄만큼 나쁜 연습이다. 여러 사용자 (Rune Kaagaard 포함)가 지적한 것처럼 참조를 찾고 필요에 따라 분석하고 삭제해야합니다. – zozo

1

아마도이 오류가 발생하는 이유는 다른 스키마와 동일한 테이블입니다.

먼저 자식 행과 부모 행을 먼저 삭제해야합니다.

0

나는이 잠시 동안 부실 실현하고 답변을 선택했다,하지만 어떻게 대안에 대한 것은 외부 키가 NULL하고 다음 DELETE SET NULL의 ON 를 선택할 수 있도록 할 수 있습니다.기본적으로

, 당신의 테이블과 같이 변경해야합니다 :

ALTER TABLE 'bericht' DROP FOREIGN KEY 'your_foreign_key'; 개인적으로

ALTER TABLE 'bericht' ADD CONSTRAINT 'your_foreign_key' FOREIGN KEY ('column_foreign_key') REFERENCES 'other_table' ('column_parent_key') ON UPDATE CASCADE ON DELETE SET NULL;

내가 피하기 위해 "ON ​​SET NULL 삭제" "UPDATE CASCADE ON"뿐만 아니라 모두 사용하는 것이 좋습니다 불필요한 합병증, 그러나 당신의 설정은 다른 접근 방식을 요구할 수 있습니다.

희망이 도움이됩니다.