it-swarm.dev

외부 키 제거하기

기본 키가 여러 테이블에 사용되고 다른 테이블에 여러 개의 외래 키가있는 테이블이 있습니다.

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;

문제는 내가 foreign key 컬럼 (즉, locationIDX) 중 하나를 삭제하려고 할 때 에러가 발생한다는 것입니다.

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

이 오류없이 위의 할당 표에 열을 어떻게 놓을 수 있습니까?

169
Drew

설명 된대로 여기 , 외래 키 제약 조건은 제약 이름 및 인덱스 이름이 아닌 것으로 나타납니다. 구문은 다음과 같습니다.

alter table footable drop foreign key fooconstraint
408
pugmarx

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

나는 다음과 같은 질문을한다고 생각한다.

ALTER TABLE assignmentStuff DROP FOREIGN KEY assignmentIDX;
21
zombat

위의 모두가 말했듯이, 당신은 쉽게 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;

희망이 도움이!

8
norodin

외래 키 제약 조건을 삭제하는 방법은 다음과 같습니다. ALTER TABLE location.location_id DROP FOREIGN KEY location_ibfk_1;

3
Rock King Kirant

테이블에 InnoDB 엔진이 사용된다면 보통이 에러가 발생한다. 이 경우 외래 키를 삭제 한 다음 alter table을 수행하고 열을 삭제해야합니다.

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

SHOW CREATE TABLE 영역; 이것은 왼쪽 상단 구석에 + 행 옵션을 클릭하고, 전체 텍스트 raio 버튼을 클릭 한 다음 이동을 클릭하십시오. 다음과 같이 색인의 이름을 얻으십시오 :

CONSTRAINT region_ibfk_1 FOREIGN KEY (country_id) 참조 국가 (id) ON UP UP NO NOTION에 대한 조치를 삭제하십시오 NO NOTION 다음을 발행하십시오 :

테이블 영역 드롭 외래 키 변경 region_ibfk_1;

또는

더 간단하게 다음과 같이 입력하십시오 : - alter table TableName drop foreign key TableName_ibfk_1;

유일한 것은 기억하는 것임을 기억하십시오. _ibfk_1 귀하의 tablename 다음과 같이 만들 : - TableName_ibfk_1

1
Abinash Hota

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

비슷한 질문이 이미 있습니다 여기 . 자세한 내용은 여기 를 확인하십시오.

0

step1 : show create table vendor_locations;

step2 : ALTER TABLE vendor_locations drop foreign key vendor_locations_ibfk_1;

그것은 나를 위해 일했다.

0
Jyothi M

이 시도:

alter table Documents drop
  FK__Documents__Custo__2A4B4B5E
0
Shailendra Mishra