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


160

나는 이것을 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)

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


@skiphoppy-당신은 이미 주어진 답변에 현상금을 주려고합니까? 그것도 허용됩니까? 아니면 귀하의 경우가 다르면 다른 스레드를 시작해야합니까?
Rick James

@RickJames 그렇습니다. 그러나 현상금이 끝나면 현상금 메시지가 사라 지므로, skiphoppy는 선택한 답변 아래에 의견을 추가해야합니다.
RandomSeed

답변:


240

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

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

테이블 생성 영역 표시;

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

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

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

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

그리고 마지막으로 :

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

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


하나의 ALTER TABLE 쿼리에서 외래 키와 열을 삭제할 수도 있습니다.
Valentin Grégoire

좋은! 우리는 외래 키를 삭제해야합니다. 모든 것이 정상입니다! 감사!
Luan D

173

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

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

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

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


2
다시, 잘못된 오해의 여지가있는 MySQL이 오류를 표시했습니다. 감사합니다.
e2-e4

phpMyAdmin에서 Storage Engines , InnoDB , InnoDB Status
Maxence

15

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

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

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;

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


1
mysql 오류로 인해 테이블의 다른 문자 집합으로 전환하는 동안이 작업이 필요했습니다. ERROR 1025 (HY000) : './table/#sql-14ae_81'의 이름을 바꿀 때 오류가 발생했습니다. (errno : 150)
letsjump

7

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

ALTER TABLE slide_image_sub DROP  KEY  FK_slide_image_sub;

여기에 DROP KEY대신 DROP FOREIGN KEY,

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

감사


4

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

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

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

SET FOREIGN_KEY_CHECKS = 0;

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

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

SET FOREIGN_KEY_CHECKS = 1;

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


xampp에 octobercms를 설치하는 데 문제가 있었으므로 마침내 도움이되었습니다.
jahackbeth

2

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

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


1

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


귀하의 답변 중 일부를 따르기가 어려웠지만 버그 보고서에 연결하면 +1입니다. 분명히, 이제 MySQL v5.6.6에서 수정되었습니다. :)
mwfearnley

1

MySQL Workbench와 같은 클라이언트를 사용하는 경우 외래 키를 삭제할 위치에서 원하는 테이블을 마우스 오른쪽 단추로 클릭 한 다음 외래 키 탭을 선택하고 인덱스를 삭제하십시오.

그런 다음 다음과 같이 쿼리를 실행할 수 있습니다.

alter table table_name drop foreign_key_col_name;

1

변경하려는 기본 키를 참조하는 외래 키가있는 다른 테이블이있을 수 있습니다.

어떤 테이블에서 오류가 발생했는지 확인한 SHOW ENGINE INNODB STATUS후 해당 LATEST FOREIGN KEY ERROR섹션 을 살펴보십시오.

SHOW CREATE TABLE 카테고리를 사용하여 제한 조건 이름을 표시하십시오.

아마도 categories_ibfk_1 일 것입니다

이름을 사용하여 외래 키를 먼저 삭제 한 다음 열을 삭제하십시오.

ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;

1

하기

SET FOREIGN_KEY_CHECKS=0;

작업이 트릭을 수행하기 전에.


0

외래 키 제약 문제가 있다고 생각합니다. country_id가 다른 테이블에서 외래 키로 사용됩니까?

나는 DB 전문가가 아니지만 fk를 제거하고 변경 테이블 작업을 한 다음 fk 작업을 다시 실행하여 이와 같은 문제 (fk 제약 조건이있는 곳)를 해결했다고 생각합니다.

결과가 무엇인지 듣고 싶을 것입니다-언젠가 mysql은 매우 암호입니다.


MySQL은 끔찍할 수 있습니다. 일반적으로 좋지만 오류 메시지, she. 사무실에있는 누군가로부터 간결한 설명을 얻는다면 여기에 버리겠습니다.
Trenton

0

필자의 경우 MySQL 워크 벤치를 사용하고 있었고 테이블에 열 중 하나를 삭제하는 동안 동일한 문제에 직면했습니다. 외래 키 이름을 찾을 수 없습니다. 문제를 해결하기 위해 다음 단계를 수행했습니다.

  1. Rt. 스키마를 클릭하고 '스키마 인스펙터'를 선택하십시오. 이것은 당신에게 다양한 테이블, 열, 인덱스 등을 제공합니다.

  2. '인덱스'라는 탭으로 이동하여 '열'이라는 열 아래에서 열 이름을 검색하십시오. 발견되면 열 이름 'Table'에서이 레코드의 테이블 이름을 확인하십시오. 원하는 테이블 이름과 일치하면 'Name'열에서 외래 키 이름을 적어 둡니다.

  3. 이제 쿼리를 실행하십시오. ALTER table tableNamexx DROP KEY foreignKeyName;

  4. 이제 성공적으로 실행될 drop 문을 실행할 수 있습니다.


0

MySQL 5.6 에서이 오류가 발생했지만 외래 키와 관련이 없습니다. 소규모 LAN에서 서버 역할을하는 Windows 7 Professional 컴퓨터에있었습니다.

클라이언트 응용 프로그램은 테이블을 작성하고 일부 외부 데이터로 테이블을 채우고 영구 테이블과 조인 한 다음 "임시"테이블을 삭제하는 배치 조작을 수행했습니다. 이 배치는이 작업을 약 300 회 수행하며이 특정 루틴은 갑자기 오류 1025 오류가 발생하여 배치의 임의 지점에서 문제가 발생하는 몇 주 동안 일주일 동안 실행되었습니다.

필자의 경우 응용 프로그램은 4 개의 DDL 문을 사용하여 CREATE TABLE 다음에 3 개의 CREATE INDEX를 사용했으며 외래 키는 없습니다. 그러나 실제로는 인덱스 중 2 개만 만들어지고 실패 시점에 실제 테이블 .frm 파일의 이름이 바뀌 었습니다.

내 해결책은 별도의 CREATE INDEX 문을 제거하고 CREATE TABLE 문을 사용하여 작성하는 것이 었습니다. 글을 쓰는 시점 에서이 문제를 해결 했으며이 스레드를 찾을 때 다른 사람이 머리를 긁는 데 도움이되었습니다.


-2

averageRatings = FOREACH groupedRatings GENERATE 그룹 AS movieID, AVG (ratings.rating) AS 평균, COUNT (ratings.rating) AS numRatings;

위와 같은 명령을 사용하는 경우 작은 문자로 그룹을 사용해야합니다. 이렇게하면 내 문제를 해결할 수 있습니다. 최소한 PIG 스크립트에서.


나는 이것이 문제와 관련이 있다고 생각하지 않는다, 또는 그녀는 mysql 문제를 치고있다
Zdenek Machek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.