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
'IT' 카테고리의 다른 글
테이블의 ID 열에 대한 명시 적 값은 열 목록이 사용되고 IDENTITY_INSERT가 ON 인 경우에만 지정할 수 있습니다. (0) | 2020.05.23 |
---|---|
URL 매개 변수 변경 (0) | 2020.05.23 |
맞춤 확인란 이미지 Android (0) | 2020.05.23 |
왜 타입이 아닌 변수 이름 앞에 별표가 나타나는가? (0) | 2020.05.23 |
jQuery를 사용하여 즉각적인 하위 div 요소 수 (0) | 2020.05.23 |