IT

MySQL 일부 외래 키 제거

lottoking 2020. 5. 23. 09:14
반응형

MySQL 일부 외래 키 제거


기본 키가 다른 여러 테이블에서 사용되고 다른 테이블에 대한 외래 키가 여러 개인 테이블이 있습니다.

CREATE TABLE location (
   locationID INT NOT NULL AUTO_INCREMENT PRIMARY KEY
   ...
) ENGINE = InnoDB;

CREATE TABLE assignment (
   assignmentID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
   locationID INT NOT NULL,
   FOREIGN KEY locationIDX (locationID) REFERENCES location (locationID)
   ...
) ENGINE = InnoDB;

CREATE TABLE assignmentStuff (
   ...
   assignmentID INT NOT NULL,
   FOREIGN KEY assignmentIDX (assignmentID) REFERENCES assignment (assignmentID)
) ENGINE = InnoDB;

문제는 외래 키 열 중 하나 (예 : locationIDX)를 삭제하려고 할 때 오류가 발생한다는 것입니다.

"오류 1025 (HY000) : 이름 바꾸기 오류"

이 오류가 발생하지 않고 위의 할당 테이블에서 열을 삭제하려면 어떻게해야합니까?


여기설명 된 것처럼 외래 키 제약 조건은 인덱스 이름이 아닌 제약 조건 이름 으로 삭제해야합니다 . 구문은 다음과 같습니다.

alter table footable drop foreign key fooconstraint

외래 키는 데이터 무결성을 보장하기 위해 존재하므로 외래 키의 일부인 한 열을 삭제할 수 없습니다. 키를 먼저 떨어 뜨려야합니다.

다음 쿼리가 그렇게 할 것이라고 생각합니다.

ALTER TABLE assignmentStuff DROP FOREIGN KEY assignmentIDX;

위에서 말했듯이 FK를 쉽게 삭제할 수 있습니다. 그러나 방금 KEY 자체를 삭제해야 할 수도 있습니다. 마지막 색인과 같은 다른 색인을 작성하는 오류 메시지가있는 경우 동일한 이름을 사용하면 해당 색인과 관련된 모든 항목을 삭제하는 것이 좋습니다.

ALTER TABLE your_table_with_fk
  drop FOREIGN KEY name_of_your_fk_from_show_create_table_command_result,
  drop KEY the_same_name_as_above

CONSTRAINT 이름과 FOREIGN KEY 이름이 무엇인지 확인하십시오.

SHOW CREATE TABLE table_name;

CONSTRAINT 이름과 FOREIGN KEY 이름을 모두 제거하십시오.

ALTER TABLE table_name
  DROP FOREIGN KEY the_name_after_CONSTRAINT,
  DROP KEY the_name_after_FOREIGN_KEY;

도움이 되었기를 바랍니다!


외래 키 제약 조건을 삭제하는 방법이 있습니다. 테이블 변경 location. location_id드롭 외래 키 location_ibfk_1;


테이블에서 InnoDB 엔진을 사용하는 경우 일반적으로이 오류가 발생합니다. 이 경우 외래 키를 삭제 한 다음 alter 테이블을 수행하고 열을 삭제해야합니다.

그러나 까다로운 부분은 열 이름을 사용하여 외래 키를 삭제할 수 없지만 색인을 생성하는 데 사용되는 이름을 찾아야한다는 것입니다. 이를 찾으려면 다음을 선택하십시오.

테이블 생성 영역 표시; 왼쪽 상단 모서리에서 + 옵션을 클릭하고 전체 텍스트 raio 버튼을 클릭 한 다음 이동을 클릭하면 행이 표시됩니다. 색인의 이름이 다음과 같이 나타납니다.

CONSTRAINT region_ibfk_1 FOREIGN KEY (country_id) 참조 국가 (id) ON 업데이트에 대한 조치 없음 삭제 조치 없음 이제 간단히 다음을 발행하십시오.

테이블 영역 삭제 외래 키 region_ibfk_1 변경;

또는

더 간단하게 입력 :-alter table TableName drop foreign key TableName_ibfk_1 ;

테이블 이름 뒤에 _ibfk_1 을 추가 하여 다음과 같이 만드는 것이 유일 합니다 .- TableName _ibfk_1


외래 키 열이 테이블에서 참조되고 있으므로 삭제할 수 없습니다 assignmentStuff. 따라서 먼저 외래 키 제약 조건을 삭제해야합니다 assignmentStuff.assignmentIDX.

비슷한 질문이 이미 여기 에 요청 되었습니다 . 자세한 내용 여기확인 하십시오 .


이 시도:

alter table Documents drop
  FK__Documents__Custo__2A4B4B5E

1 단계: show create table vendor_locations;

2 단계: ALTER TABLE vendor_locations drop foreign key vendor_locations_ibfk_1;

그것은 나를 위해 일했다.

참고 URL : https://stackoverflow.com/questions/838354/mysql-removing-some-foreign-keys

반응형