itsource

MySQL 일부 외부 키 제거

mycopycode 2022. 9. 14. 22:26
반응형

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;

문제는 외부 키 열 중 하나를 드롭하려고 할 때(즉, 위치)입니다.IDX) 에러가 표시됩니다.

"ERROR 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

제약 조건 이름과 FORENAL KEY 이름을 확인합니다.

SHOW CREATE TABLE table_name;

제약 조건 이름과 FORENAL KEXTRAINE KEY 이름:

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

이게 도움이 됐으면 좋겠네요!

내가 위의 순서를 따라갔더니 해결 방법을 찾았어

SHOW CREATE TABLE footable;

다음과 같은 FK 구속 이름을 얻을 수 있습니다.

ProjectsInfo_ibfk_1

이제 이 구속조건을 제거해야 합니다. 테이블 커맨트를 바꿉니다.

alter table ProjectsInfo drop foreign key ProjectsInfo_ibfk_1;

그런 다음 테이블 컬럼을 드롭합니다.

alter table ProjectsInfo drop column clientId;

외부 키 제약 조건을 삭제하는 방법은 다음과 같습니다. 효과가 있습니다.얼터 테이블location.location_id외부 키를 떨어뜨리다location_ibfk_1;

테이블에서 InnoDB 엔진을 사용하는 경우 보통 이 오류가 발생합니다.이 경우 외부 키를 드롭한 후 alter table을 실행하여 열을 드롭해야 합니다.

단, 어려운 점은 열 이름을 사용하여 외부 키를 삭제할 수 없고 대신 인덱스에 사용되는 이름을 찾아야 한다는 것입니다.이를 찾으려면 다음 선택 항목을 발급하십시오.

CREATE TABLE 영역 표시;그러면 왼쪽 상단 모서리에 있는 + 옵션을 클릭하고 전체 텍스트 raio 버튼을 클릭한 다음 go를 클릭합니다.여기서 인덱스의 이름이 다음과 같이 표시됩니다.

제약사항 region_ibfk_1 외부 키(country_id) REferences 국가(id) DELETE NO ACTION ON UPDATE NO ACTION 지금 간단히 다음 사항을 발행합니다.

변경 테이블 영역 드롭 외부 키 영역_ibfk_1;

또는

좀 더 간단하게 입력:- alter TableName drop 외부 키 TableName_ibfk_1;

tablename 뒤에 _ibfk_1을 추가하면 다음과 같이 됩니다.- TableName _ ibfk _ 1

키되고 있기 할 수 .assignmentStuff 먼저 키 조건을 해야 합니다.assignmentStuff.assignmentIDX.

비슷한 질문이 이미 여기에 있었다.자세한 것은, 이쪽도 확인해 주세요.

이것을 시험해 보세요.

alter table Documents drop
  FK__Documents__Custo__2A4B4B5E

1: 서 1:show create table vendor_locations;

2: 서 22:ALTER TABLE vendor_locations drop foreign key vendor_locations_ibfk_1;

그것은 나에게 효과가 있었다.

먼저 이 쿼리로 실제 제약 이름을 가져와야 합니다.

SHOW CREATE TABLE TABLE_NAME

이 쿼리는 외부 키의 제약 이름을 나타내며, 이제 쿼리 아래로 떨어집니다.

ALTER TABLE TABLE_NAME DROP FOREIGN KEY COLUMN_NAME_ibfk_1

위의 제약 이름의 마지막 숫자는 테이블에 있는 외부 키 수에 따라 달라집니다.

언급URL : https://stackoverflow.com/questions/838354/mysql-removing-some-foreign-keys

반응형