문제

MySQL 버전 5.1에서 테이블을 만들기위한 다음 스크립트가 있습니다. 3 개의 테이블 모두 innodb를 사용하여 생성되었으며 3 개의 테이블 모두 ID 열이 int로 정의되어 있습니다.

다른 테이블을 성공적으로 만들었지 만, 계정과 사람이 주소를 참조하는 첫 번째 표이므로 아래 테이블에 대한 정의를 아래에 포함 시켰습니다.

내가 얻는 오류는 Errno 150의 오류 1005 (hy000)이며, 이는 외국 키 생성과 관련이 있음을 이해합니다.

실패한 스크립트는 (단순성을 위해 추가 열이 제거됨) :

CREATE TABLE WORK_ORDER (
    ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ACCOUNT_ID INT NOT NULL,
    CUSTOMER_ID INT NOT NULL,
    SALES_ID INT,
    TRADES_ID INT,
    LOCATION_ID INT NOT NULL,
    INDEX CUST_INDEX(CUSTOMER_ID),
    INDEX SALES_INDEX(SALES_ID),
    INDEX TRADES_INDEX(TRADES_ID),
    INDEX ACCOUNT_INDEX(ACCOUNT_ID),
    INDEX LOCATION_INDEX(LOCATION_ID),
    FOREIGN KEY (CUSTOMER_ID) REFERENCES PERSON(ID) ON DELETE CASCADE,
    FOREIGN KEY (SALES_ID) REFERENCES PERSON(ID) ON DELETE SET NULL,
    FOREIGN KEY (TRADES_ID) REFERENCES PERSON(ID) ON DELETE SET NULL,
    FOREIGN KEY (ACCOUNT_ID) REFERENCES ACCOUNT(ID) ON DELETE CASCADE,
    FOREIGN KEY (LOCATION_ID) REFERENCES ADDRESS(ID) ON DELETE SET NULL
) ENGINE=InnoDB;

주소 테이블을 작성하는 데 사용되는 SQL 문은 아래에 있습니다 (단순성을 위해 제거 된 추가 열).

CREATE TABLE ADDRESS (
    ID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    PERSON_ID INT NOT NULL,
    ACCOUNT_ID INT NOT NULL,
    ADDRESS_L1 VARCHAR(50),
    ADDRESS_L2 VARCHAR(50),
    CITY VARCHAR(25),
    PROVINCE VARCHAR(20),
    POSTAL_CODE VARCHAR(6),
    COUNTRY VARCHAR(25),
    INDEX CUST_INDEX(PERSON_ID),
    INDEX ACCOUNT_INDEX(ACCOUNT_ID),
    FOREIGN KEY (ACCOUNT_ID) REFERENCES ACCOUNT(ID) ON DELETE CASCADE,
    FOREIGN KEY (PERSON_ID) REFERENCES PERSON(ID) ON DELETE CASCADE
) ENGINE=InnoDB;

여기서 유사한 문제를 다루는 몇 가지 질문을 탐색했지만 대부분은 중복 정의 및 비 일치 필드 유형 인 것 같습니다. 그러나 이들 중 어느 것도 문제가되지 않는 것 같습니다. 어떤 아이디어?

도움이 되었습니까?

해결책

항상 'Show Engine InnoDB 상태'명령을 발행 할 수 있습니다. 출력에 묻힌 "최신 외국 키 오류"섹션이 있으며 '150'오류의 원인에 대한 자세한 내용은 다음과 같습니다.

mysql> create table a (x int not null) type=innodb;
Query OK, 0 rows affected, 1 warning (0.02 sec)

mysql> create table b (y int not null, foreign key (y) references a (x) on delete set null) type=innodb;
ERROR 1005 (HY000): Can't create table './test/b.frm' (errno: 150)

mysql> show engine innodb status;
[..... snip snip snip ...]
------------------------
LATEST FOREIGN KEY ERROR
------------------------
091129 16:32:41 Error in foreign key constraint of table test/b:
foreign key (y) references a (x) on delete set null) type=innodb:
You have defined a SET NULL condition though some of the
columns are defined as NOT NULL.
[.... snip snip snip ...]
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top