[mysql] mysql 오류 1025 (HY000) : ‘./foo'(오류 번호 : 150) 이름 바꾸기 오류는 무엇을 의미합니까?

나는 이것을 mysql에서 시도했다.

mysql> alter table region drop column country_id;

그리고 이것을 얻었다 :

ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)

어떤 아이디어? 외래 핵심 물건?



답변

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

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

테이블 생성 영역 표시;

다음과 같은 색인 이름이 표시됩니다.

제약 region_ibfk_1외래 키 ( country_id) 참조
country( id) ON 업데이트에 대한 조치 없음 삭제 조치 없음

이제 간단히 발행하십시오 :

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

그리고 마지막으로 :

테이블 영역 삭제 열 country_id를 변경하십시오.

그리고 당신은 갈 수 있습니다!


답변

실제로 외래 키 오류이므로 perror를 사용하여 찾을 수 있습니다.

shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed

무엇이 실패했는지에 대한 자세한 정보를 찾으려면 SHOW ENGINE INNODB STATUS가장 최근에 발생한 주요 오류 섹션을 사용 하여 찾아보십시오. 무엇이 잘못되었는지에 대한 세부 사항이 포함되어 있습니다.

귀하의 경우, country_id 열을 참조하는 것이 원인 일 가능성이 큽니다.


답변

존재하지 않는 외래 키를 삭제하려고하면이 오류가 발생할 수 있습니다. 따라서 외래 키를 떨어 뜨릴 때는 항상 실제로 존재하는지 확인하십시오.

외래 키가 존재하지만이 오류가 계속 발생하면 다음을 시도하십시오.

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

// 여기에 외래 키를 버린다!

SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

이것은 항상 나를 위해 트릭을 수행합니다 🙂


답변

drop 문에서 ‘FOREIGN KEY’대신 ‘KEY’를 사용하여 alter table 쿼리를 실행하면됩니다. 문제를 해결하는 데 도움이되고 외래 키 제약 조건을 삭제하고 테이블 열을 변경하고 테이블을 삭제할 수 있기를 바랍니다.

ALTER TABLE slide_image_sub DROP  KEY  FK_slide_image_sub;

여기에 DROP KEY대신 DROP FOREIGN KEY,

그것이 도움이되기를 바랍니다.

감사


답변

나는 이것이 오래된 게시물이지만 오류 1025를 찾고 있다면 모든 사람이 좋아하는 검색 엔진에서 처음으로 발견되었습니다.

그러나이 문제를 해결하기위한 쉬운 “해킹”이 있습니다.

명령을 실행하기 전에 먼저이 명령을 사용하여 외래 키 제약 조건 검사를 비활성화해야합니다.

SET FOREIGN_KEY_CHECKS = 0;

그런 다음 명령을 실행할 수 있습니다.

완료되면 다음 명령을 사용하여 외래 키 제약 조건 검사를 다시 활성화해야합니다.

SET FOREIGN_KEY_CHECKS = 1;

당신의 노력으로 행운을 빕니다.


답변

비슷한 문제가 한 번있었습니다. 표 A에서 기본 키를 삭제했지만 테이블 BI에서 외래 키 열을 삭제하려고 할 때 위와 동일한 오류가 표시되었습니다.

열 이름을 사용하여 외래 키를 삭제할 수 없으며 PHPMyAdmin 또는 MySQL에서이를 무시하려면 먼저 속성의 이름을 바꾸거나 삭제하기 전에 외래 키 제약 조건을 제거하십시오.


답변

mysql 데이터베이스에 대한 오류 파일을 살펴보십시오. 버그 # 26305 에 따르면 내 SQL은 원인을 제공하지 않습니다. 이 버그는 MySQL 4.1 ;-)부터 존재합니다.