복붙노트

[SQL] MySQL의 : 테이블을 만들 수 없습니다 (errno를 : 150)

SQL

MySQL의 : 테이블을 만들 수 없습니다 (errno를 : 150)

나는 .SQL 파일 및 테이블 작성에 자사의 실패를 가져 오기 위해 노력하고 있어요.

여기에 실패 쿼리는 다음과 같습니다

CREATE TABLE `data` (
`id` int(10) unsigned NOT NULL,
`name` varchar(100) NOT NULL,
`value` varchar(15) NOT NULL,
UNIQUE KEY `id` (`id`,`name`),
CONSTRAINT `data_ibfk_1` FOREIGN KEY (`id`) REFERENCES `keywords` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1;    

나는 그것을 가져, 왜 실패하려고 메신저 이제 모든 테이블을 떨어 그리고, 동일한 데이터베이스에서 .SQL 수출?

해결법

  1. ==============================

    1.MySQL의에서 - FOREIGN KEY 제약 조건 문서 :

    MySQL의에서 - FOREIGN KEY 제약 조건 문서 :

  2. ==============================

    2.당신이 당신의 외래 키에 문제가 (150 개) 수단을 오류가 발생했습니다. 아마도 외국 테이블의 키는 동일한 유형이 아닌가요?

    당신이 당신의 외래 키에 문제가 (150 개) 수단을 오류가 발생했습니다. 아마도 외국 테이블의 키는 동일한 유형이 아닌가요?

  3. ==============================

    3.당신은 SHOW ENGINE INNODB 상태를 실행하여 실제 오류 메시지를 얻을 수 있습니다; 다음 출력에 최신 FOREIGN KEY 오류를 찾고.

    당신은 SHOW ENGINE INNODB 상태를 실행하여 실제 오류 메시지를 얻을 수 있습니다; 다음 출력에 최신 FOREIGN KEY 오류를 찾고.

    출처 : 비슷한 질문에 다른 사용자의 대답

  4. ==============================

    4.데이터 유형은 정확히 일치해야합니다. 당신이 VARCHAR 유형을 처리하는 경우, 테이블은 동일한 데이터 정렬을 사용해야합니다.

    데이터 유형은 정확히 일치해야합니다. 당신이 VARCHAR 유형을 처리하는 경우, 테이블은 동일한 데이터 정렬을 사용해야합니다.

  5. ==============================

    5.올바른 질문에 오해의 소지가있는 동안 나는이 모든 답을 생각합니다.

    올바른 질문에 오해의 소지가있는 동안 나는이 모든 답을 생각합니다.

    당신은 당신이 외래 키와 덤프 파일을 복원하는 경우는, 복원을 시작하기 전에 실제 대답은 이것이다 :

    SET FOREIGN_KEY_CHECKS=0;
    

    외국 테이블도 존재하기 전에 자연스럽게 몇 가지 제약 조건을 만드는 것이다 복원 때문이다.

  6. ==============================

    6.관련된 테이블 사이의 서로 다른 엔진이있는 경우 경우에 따라서는이 오류 메시지가 발생할 수 있습니다. 예를 들어, 테이블은 다른 용도가있는 MyISAM 동안 이노를 사용 할 수있다. 둘 필요가 동일합니다

    관련된 테이블 사이의 서로 다른 엔진이있는 경우 경우에 따라서는이 오류 메시지가 발생할 수 있습니다. 예를 들어, 테이블은 다른 용도가있는 MyISAM 동안 이노를 사용 할 수있다. 둘 필요가 동일합니다

  7. ==============================

    7.어떤 에러 없습니다. 150 개 수단 외래 키 제약 실패. 당신은 아마 외래 키는 (표 키워드)에 따라 테이블 전에이 테이블을 만들 수 있습니다. 먼저 테이블을 만들고 그것을 잘 작동합니다.

    어떤 에러 없습니다. 150 개 수단 외래 키 제약 실패. 당신은 아마 외래 키는 (표 키워드)에 따라 테이블 전에이 테이블을 만들 수 있습니다. 먼저 테이블을 만들고 그것을 잘 작동합니다.

    그렇지 않은 경우, 외부 키 문을 제거하고 테이블이 생성 된 후 추가 - 당신이 특정 제약 실패에 대한보다 의미있는 오류 메시지가 표시됩니다.

  8. ==============================

    8.이 주제를 검색하는 사람들을 위해 이렇게, errno는 150 발생할 수 있습니다 꽤 몇 가지가 있습니다, 여기에 내가 완전한 목록 (소스의 errno (150)의 원인)에 가까운 생각입니다 :

    이 주제를 검색하는 사람들을 위해 이렇게, errno는 150 발생할 수 있습니다 꽤 몇 가지가 있습니다, 여기에 내가 완전한 목록 (소스의 errno (150)의 원인)에 가까운 생각입니다 :

    errno를 150 errno를 (121)의 경우, 단순히 SHOW ENGINE INNODB 상태를 입력, "최신 FOREIGN KEY 오류"라는 부분이있다. 그 아래 것은 당신에게 일반적으로 바로 문제입니다 무엇을 말할 것이다 매우 유용한 오류 메시지를 줄 것이다. 당신은 당신이없는 경우 그래서, 당신은 단지 다음과 같은 시나리오를 테스트해야합니다, 그것을 실행하는 SUPER 권한이 필요합니다.

    1) 데이터 형식이 일치하지 않습니다 : 컬럼의 유형이 동일해야

    2) 부모의 열은 잘못된 순서로 (또는 인덱스) 인덱싱되지

    3) 열 데이터 정렬 일치하지 않음

    4) NOT NULL 컬럼에 SET NULL의 사용

    5) 표 데이터 정렬 할 일이 일치하지 : 열 정렬이 일치하는 경우에도, 일부 MySQL의 버전에서이 문제가 될 수 있습니다.

    6) 부모의 열은 실제로 부모 테이블에 존재하지 않습니다. 맞춤법 검사 (및 시작 또는 열의 끝에 아마도 공간)

    열 중 하나에 인덱스 7)에 입력되지 않은 경우, 또는 열은 전체 색인 너무 깁니다. 참고 MySQL은 (당신이 그것을 조정할하지 않는 한) 767 바이트의 최대 단일 열 키 길이를 가지고 (A VARCHAR이 해당한다 (255) UTF 열)

    경우에 당신은 errno를 121 얻을, 여기에 원인을 몇 가지 있습니다 :

    1) 당신이 선택한 제약 조건 이름은 이미 촬영

    2) 어떤 시스템 명세서 및 테이블 이름의 경우 차이가있을 경우. 당신이 다른 경우 처리 규칙이 그 한 서버에서 다른 서버로 이동하는 경우 이것은 당신을 물지 수 있습니다.

  9. ==============================

    9.내가 외국 키의 이유 원인을 이해할 수있다 ..하지만 내 경우에는, 난 그냥 전체 데이터베이스를 떨어졌다, 그리고 난 여전히 오류가 ... 왜 - 때때로 MySQL은 단지 슈퍼 바보? 난 ... 내 말은, 서버는 현재 사용자의 "빈"내가 아직 도착이 어떤 데이터베이스가 더 이상 없습니다 ... 그리고 내가 사용하고는 SQL-사용자가 서버에있는 다른 DB의에 액세스 할 수 없습니다 의미 이 오류? 미안하지만 난 MySQL이 나에게 거짓말을 ...하지만 내가 그것을 처리 할 수 ​​:) 그냥 fucky 문 주위에 SQL이 두 줄을 추가 같아요

    내가 외국 키의 이유 원인을 이해할 수있다 ..하지만 내 경우에는, 난 그냥 전체 데이터베이스를 떨어졌다, 그리고 난 여전히 오류가 ... 왜 - 때때로 MySQL은 단지 슈퍼 바보? 난 ... 내 말은, 서버는 현재 사용자의 "빈"내가 아직 도착이 어떤 데이터베이스가 더 이상 없습니다 ... 그리고 내가 사용하고는 SQL-사용자가 서버에있는 다른 DB의에 액세스 할 수 없습니다 의미 이 오류? 미안하지만 난 MySQL이 나에게 거짓말을 ...하지만 내가 그것을 처리 할 수 ​​:) 그냥 fucky 문 주위에 SQL이 두 줄을 추가 같아요

    SET FOREIGN_KEY_CHECKS = 0;
    # some code that gives you errno: 150
    SET FOREIGN_KEY_CHECKS = 1;
    

    당신이 정말 외래 키에 문제가있는 경우 이제 SQL이 실행되어야한다 ..., 당신이 다시 검사를 가능하게 할 것이다 라인에 의해 당신에게 나타날 것 -이 후 실패합니다 ..하지만 내 서버에 그냥 조용 :)

  10. ==============================

    10.(- 오류 150 1005) 위의 답변을 통해 순항하고 약간의 실험을 한 후,이 MySQL의에서 외부 키 오류를 해결하는 효과적인 방법이다.

    (- 오류 150 1005) 위의 답변을 통해 순항하고 약간의 실험을 한 후,이 MySQL의에서 외부 키 오류를 해결하는 효과적인 방법이다.

    외래 키가 제대로 생성 할 경우, 모든 MySQL은 IS를 요청합니다 :

    충족 이러한 요구 사항 모두 잘 될 것입니다.

  11. ==============================

    11.나는 리눅스로 Windows 응용 프로그램을 포팅 한이 오류가 발생했습니다. Windows에서 데이터베이스 테이블 이름은 대소 문자를 구별하고, 리눅스에서 그들은 아마도 때문에 파일 시스템의 차이, 대소 문자를 구분합니다. 그래서, 윈도우 테이블의 표는 표 1과 동일하고, 참조의 표를 모두와 표 작동합니다. Linux에서 응용 프로그램 대신에 표 1의 표를 사용 할 때 데이터베이스 구조 I 톱 오류 # 150을 만들 때; 내가 표 참조에 올바른 문자 케이스를 만들 때, 너무 리눅스에서 작동하기 시작했다. 다른 아무것도 할 수없는 경우에 따라서, 참조 당신이 때 리눅스에서 테이블 이름에 올바른 대소 문자를 사용하고 있는지를 확인하십시오.

    나는 리눅스로 Windows 응용 프로그램을 포팅 한이 오류가 발생했습니다. Windows에서 데이터베이스 테이블 이름은 대소 문자를 구별하고, 리눅스에서 그들은 아마도 때문에 파일 시스템의 차이, 대소 문자를 구분합니다. 그래서, 윈도우 테이블의 표는 표 1과 동일하고, 참조의 표를 모두와 표 작동합니다. Linux에서 응용 프로그램 대신에 표 1의 표를 사용 할 때 데이터베이스 구조 I 톱 오류 # 150을 만들 때; 내가 표 참조에 올바른 문자 케이스를 만들 때, 너무 리눅스에서 작동하기 시작했다. 다른 아무것도 할 수없는 경우에 따라서, 참조 당신이 때 리눅스에서 테이블 이름에 올바른 대소 문자를 사용하고 있는지를 확인하십시오.

  12. ==============================

    12.당신의 테이블의 엔진을 변경 만 InnoDB는 외래 키 지원

    당신의 테이블의 엔진을 변경 만 InnoDB는 외래 키 지원

  13. ==============================

    13.약동학 테이블이 하나 CHARSET에서 생성 한 다음 다른 CHARSET..then에서 FK 테이블을 만들 경우에도이 오류를 얻을 수 있습니다 ... 나도이 오류를 가지고 있지만, PK에 문자 집합을 변경 한 후에는이 오류없이 실행있어 다음 문자셋

    약동학 테이블이 하나 CHARSET에서 생성 한 다음 다른 CHARSET..then에서 FK 테이블을 만들 경우에도이 오류를 얻을 수 있습니다 ... 나도이 오류를 가지고 있지만, PK에 문자 집합을 변경 한 후에는이 오류없이 실행있어 다음 문자셋

    create table users
    (
    ------------
    -------------
    )DEFAULT CHARSET=latin1;
    
    
    create table Emp
    (
    ---------
    ---------
    ---------
    FOREIGN KEY (userid) REFERENCES users(id) on update cascade on delete cascade)ENGINE=InnoDB, DEFAULT CHARSET=latin1;
    
  14. ==============================

    14.두 테이블 예를 들어, 참조가있는 경우이 오류가 발생할 수 있습니다, 하나 개의 테이블은 학생이고 다른 테이블은 교육이며, 우리는 교육 테이블 학생 테이블의 외래 키 참조를 갖고 싶어. 이때 두 테이블에 대한 열 데이터 유형은 그렇지 않으면 오류가 발생되며, 동일해야한다.

    두 테이블 예를 들어, 참조가있는 경우이 오류가 발생할 수 있습니다, 하나 개의 테이블은 학생이고 다른 테이블은 교육이며, 우리는 교육 테이블 학생 테이블의 외래 키 참조를 갖고 싶어. 이때 두 테이블에 대한 열 데이터 유형은 그렇지 않으면 오류가 발생되며, 동일해야한다.

  15. ==============================

    15.대부분의 경우에서 문제는 가정 참조 된 테이블이 반대의 MyISAM 및 부사장에 의해 생성되는 InnoDB에 의해 작성되는 부모 .If 엔진의 차이입니다

    대부분의 경우에서 문제는 가정 참조 된 테이블이 반대의 MyISAM 및 부사장에 의해 생성되는 InnoDB에 의해 작성되는 부모 .If 엔진의 차이입니다

  16. ==============================

    16.나의 경우에는. 내 호스팅 서버 설정을 변경하고 나의 새로운 테이블의 MyISAM했지만 나의 오래된 테이블이 InnoDB의 때문에 나는 엔진과 캐릭터 세트에 대한 문제가 있었다. 그냥이 변경되었습니다.

    나의 경우에는. 내 호스팅 서버 설정을 변경하고 나의 새로운 테이블의 MyISAM했지만 나의 오래된 테이블이 InnoDB의 때문에 나는 엔진과 캐릭터 세트에 대한 문제가 있었다. 그냥이 변경되었습니다.

  17. ==============================

    17.외래 키는 기본 키와 같은 데이터 유형을 가지고 있어야합니다. 기본 키는 다음 서명되지 않은 경우 또한, 외래 키는 서명해야합니다.

    외래 키는 기본 키와 같은 데이터 유형을 가지고 있어야합니다. 기본 키는 다음 서명되지 않은 경우 또한, 외래 키는 서명해야합니다.

  18. ==============================

    18.나는 같은 문제가 있었다. 그것은 테이블의 컬럼 데이터 정렬 및 문자 세트에 관련이 있었다. 확인 문자 집합을 확인하고 정렬은 두 테이블에 모두 열에 대해 동일해야합니다. 당신은에 외래 키를 설정합니다. 당신이 사용자의 사용자 ID 열을 참조 userImage 테이블의 사용자 ID 열에 외래 키를 넣어 예 - 경우 table.Then 정렬 테이블의 두 열에 대한 utf8_general_ci 및 문자 집합 UTF8입니다 동일해야합니다. 당신이 만들 때 일반적으로 테이블 MySQL은 서버 설정에서이 두 가지 구성을합니다.

    나는 같은 문제가 있었다. 그것은 테이블의 컬럼 데이터 정렬 및 문자 세트에 관련이 있었다. 확인 문자 집합을 확인하고 정렬은 두 테이블에 모두 열에 대해 동일해야합니다. 당신은에 외래 키를 설정합니다. 당신이 사용자의 사용자 ID 열을 참조 userImage 테이블의 사용자 ID 열에 외래 키를 넣어 예 - 경우 table.Then 정렬 테이블의 두 열에 대한 utf8_general_ci 및 문자 집합 UTF8입니다 동일해야합니다. 당신이 만들 때 일반적으로 테이블 MySQL은 서버 설정에서이 두 가지 구성을합니다.

  19. ==============================

    19.반드시 모두 기본 키 열 및 참조 된 열은 동일한 데이터 유형 및 특성 (서명, 이진, 서명되지 않은 ZEROFILL 등)이 있는지 확인하십시오.

    반드시 모두 기본 키 열 및 참조 된 열은 동일한 데이터 유형 및 특성 (서명, 이진, 서명되지 않은 ZEROFILL 등)이 있는지 확인하십시오.

  20. ==============================

    20.실제 에지의 경우는 데이터베이스의 이름을 변경 (제 경우에 속편 프로)는 MySQL의 도구를 사용하고있는 곳입니다. 그리고 같은 이름의 데이터베이스를 만들었습니다.

    실제 에지의 경우는 데이터베이스의 이름을 변경 (제 경우에 속편 프로)는 MySQL의 도구를 사용하고있는 곳입니다. 그리고 같은 이름의 데이터베이스를 만들었습니다.

    이것은 (my_db) 이름이 바뀐 데이터베이스 (예를 들어, my_db_renamed)가 새로 만든 데이터베이스의 외래 키 제약 조건을 가지고 있으므로, 동일한 데이터베이스 이름에 외래 키 제약 조건을 유지

    확실하지이 속편 프로에서 문제를, 또는 사용하는 경우이 동작을 필요로하지만, 그것은 나에게 아침의 가장 중요한 부분을 요하는 경우 경우 : /

  21. ==============================

    21.저도 같은 오류가 발생했습니다. 내 경우에는 오류의 이유는 나는 그것의 정의에 제약을 넣어되는 필드가 NULL NOT 문 있었을 때 내가 제약에 DELETE SET ON NULL 문을했다이었다. 현장에서 허용 NULL 문제를 해결했다.

    저도 같은 오류가 발생했습니다. 내 경우에는 오류의 이유는 나는 그것의 정의에 제약을 넣어되는 필드가 NULL NOT 문 있었을 때 내가 제약에 DELETE SET ON NULL 문을했다이었다. 현장에서 허용 NULL 문제를 해결했다.

  22. ==============================

    22.텍스트 파일에서 DB를 생성하는 동안 나는 문제의이 종류를 직면했다.

    텍스트 파일에서 DB를 생성하는 동안 나는 문제의이 종류를 직면했다.

    mysql -uroot -padmin < E:\important\sampdb\createdb.sql
    mysql -uroot -padmin sampdb < E:\important\sampdb\create_student.sql
    mysql -uroot -padmin sampdb < E:\important\sampdb\create_absence.sql
    
    mysql -uroot -padmin sampdb < E:\important\sampdb\insert_student.sql
    mysql -uroot -padmin sampdb < E:\important\sampdb\insert_absence.sql
    
    mysql -uroot -padmin sampdb < E:\important\sampdb\load_student.sql
    mysql -uroot -padmin sampdb < E:\important\sampdb\load_absence.sql 
    

    난 그냥 Create.batand 위의 선이 박쥐 파일을 실행 썼다.

    내 실수는 내 SQL 파일의 실행의 순서 순서입니다. 나는 기본 키 및 외국 키를 사용하여 테이블을 만들려고. 그것의 실행하는 동안이 참조 테이블을 검색하지만 테이블이 없습니다. 그래서 오류의 그런 종류를 반환합니다.

  23. ==============================

    23.나는 비슷한 문제가 있었다하지만 난 데이터를 가지고 기존 테이블에 새로운 필드를 추가하고, 새로운 필드가 NOT NULL의 및 기본값없는의 해상력을 가지고 또한 부모 테이블에서 다른 필드를 참조하고 있었기 때문에 나의이었다. - 내가 때문이었다 일들이 작동하지 않은 이유를 발견

    나는 비슷한 문제가 있었다하지만 난 데이터를 가지고 기존 테이블에 새로운 필드를 추가하고, 새로운 필드가 NOT NULL의 및 기본값없는의 해상력을 가지고 또한 부모 테이블에서 다른 필드를 참조하고 있었기 때문에 나의이었다. - 내가 때문이었다 일들이 작동하지 않은 이유를 발견

    이 특정 시나리오 삽입 데이터를 피할 것 전에 당신이 제약 조건을 잘 미리 데이터베이스를 계획하고 구현하는 경우 정상적인 상황에서 것을 기억하는 것이 중요하다

    이 잡았다을 피하기 위해 쉽게 접근 방식에있다

    나는 희망이 사람을 도와줍니다

  24. ==============================

    24.아마도 이것은 도움이 될 것입니다? 기본 키 컬럼의 정의는 외래 키 컬럼과 정확하게 일치한다.

    아마도 이것은 도움이 될 것입니다? 기본 키 컬럼의 정의는 외래 키 컬럼과 정확하게 일치한다.

  25. ==============================

    25.모든 테이블이 외래 키를 지원할 수 있는지 확인 - 이노 엔진

    모든 테이블이 외래 키를 지원할 수 있는지 확인 - 이노 엔진

  26. ==============================

    26.당신은 자식 테이블에서 참조되는에 부모 테이블의 컬럼은 고유해야합니다. 그렇지 않은 경우, 오류가없는 (150)가 발생합니다.

    당신은 자식 테이블에서 참조되는에 부모 테이블의 컬럼은 고유해야합니다. 그렇지 않은 경우, 오류가없는 (150)가 발생합니다.

  27. ==============================

    27.하나의 테이블로 장고 MySQL 데이터베이스를 덤프 때 비슷한 문제가 있었다. 나는 텍스트 파일로 데이터베이스를 덤프 이맥스를 사용하여 파일의 끝에 문제의 테이블을 이동하고 새 인스턴스로 수정 된 SQL 덤프 파일을 가져 와서 문제를 해결할 수 있었다.

    하나의 테이블로 장고 MySQL 데이터베이스를 덤프 때 비슷한 문제가 있었다. 나는 텍스트 파일로 데이터베이스를 덤프 이맥스를 사용하여 파일의 끝에 문제의 테이블을 이동하고 새 인스턴스로 수정 된 SQL 덤프 파일을 가져 와서 문제를 해결할 수 있었다.

    HTH 우베

  28. ==============================

    28.나는 변수가 널 (null)을 허용함으로써 문제를 수정했습니다

    나는 변수가 널 (null)을 허용함으로써 문제를 수정했습니다

    ALTER TABLE `ajout_norme` 
    CHANGE `type_norme_code` `type_norme_code` VARCHAR( 2 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL
    
  29. ==============================

    29.MySQL의 일련의 명령을 실행할 때 저도 같은 문제가있어. 광산은 아직 만들어지지 않은 다른 테이블에 외래 키를 참조 할 때 테이블을 생성하는 동안 발생합니다. 그것은 참조하기 전에 테이블 존재의 순서입니다.

    MySQL의 일련의 명령을 실행할 때 저도 같은 문제가있어. 광산은 아직 만들어지지 않은 다른 테이블에 외래 키를 참조 할 때 테이블을 생성하는 동안 발생합니다. 그것은 참조하기 전에 테이블 존재의 순서입니다.

    이 솔루션은 : 외래 키가있는 자식 테이블을 만들기 전에 먼저 부모 테이블을 생성합니다.

  30. ==============================

    30.외래 키없이 테이블을 만든 다음 별도로 외래 키를 설정합니다.

    외래 키없이 테이블을 만든 다음 별도로 외래 키를 설정합니다.

  31. from https://stackoverflow.com/questions/4061293/mysql-cant-create-table-errno-150 by cc-by-sa and MIT license