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
'itsource' 카테고리의 다른 글
PHP가 $_GET 또는 $_POST 배열에서 '.' 문자의 치환을 중지하도록 합니다. (0) | 2022.09.14 |
---|---|
EF 코어 저속 벌크 인서트(80k 행까지) (0) | 2022.09.14 |
PHP를 사용하여 IP 주소 국가 가져오기 (0) | 2022.09.13 |
JPA: 대규모 결과 세트에 대해 반복하기 위한 적절한 패턴은 무엇입니까? (0) | 2022.09.13 |
문자열이 JS의 regex와 일치하는지 확인합니다. (0) | 2022.09.13 |