본문 바로가기
MySql

MySQL 여러 외래 키?

by 베이스 공부 2020. 10. 6.
반응형

한 공급 업체에서 다른 공급 업체로 제품을 배송하는 데 소요되는 날짜와 비용을 추적하는 테이블이 있습니다. 우리는 (훌륭하게 : p) "VENDOR"테이블에 제품 취급 공급 업체 (Think ... Dunder Mifflin)와 함께 배송 공급 업체 (FedEx, UPS)를 모두 저장했습니다. 따라서 SHIPPING_DETAILS 테이블에는 모두 VENDOR.no를 참조하는 세 개의 열이 있습니다. 어떤 이유로 MySQL은 세 가지 모두를 외래 키로 정의하도록 허용하지 않습니다. 어떤 아이디어?

CREATE TABLE SHIPPING_GRID(  
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique ID for each row',  
    shipping_vendor_no INT(6) NOT NULL COMMENT 'Foreign key to VENDOR.no for the shipping vendor (vendors_type must be 3)',  
    start_vendor_no INT(6) NOT NULL COMMENT 'Foreign key to VENDOR.no for the vendor being shipped from',  
    end_vendor_no INT(6) NOT NULL COMMENT 'Foreign key to the VENDOR.no for the vendor being shipped to',  
    shipment_duration INT(1) DEFAULT 1 COMMENT 'Duration in whole days shipment will take',  
    price FLOAT(5,5) NOT NULL COMMENT 'Price in US dollars per shipment lbs (down to 5 decimal places)',  
    is_flat_rate TINYINT(1) DEFAULT 0 COMMENT '1 if is flat rate regardless of weight, 0 if price is by lbs',  
    INDEX (shipping_vendor_no),  
    INDEX (start_vendor_no),  
    INDEX (end_vendor_no),  
    FOREIGN KEY (shipping_vendor_no) REFERENCES VENDOR (no),  
    FOREIGN KEY (start_vendor_no) REFERENCES VENDOR (no),  
    FOREIGN KEY (end_vendor_no) REFERENCES VENDOR (no)  
) TYPE = INNODB;

이중 기본 키 정의를 제거하도록 수정 ...

그래, 안타깝게도 문제가 해결되지 않았습니다. 이제 나는 얻고있다 :

테이블을 만들 수 없습니다. './REMOVED MY DB NAME/SHIPPING_GRID.frm' (errno : 150)

phpinfo ()를 수행하면 mysql에 대해 다음과 같이 알려줍니다.

클라이언트 API 버전 5.0.45

예, VENDOR.no는 int (6) 유형입니다.

 

해결 방법

 

기본 키를 두 번 정의했습니다. 시험:

CREATE TABLE SHIPPING_GRID(  
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'Unique ID for each row',  
    shipping_vendor_no INT(6) NOT NULL COMMENT 'Foreign key to VENDOR.no for the shipping vendor (vendors_type must be 3)',  
    start_vendor_no INT(6) NOT NULL COMMENT 'Foreign key to VENDOR.no for the vendor being shipped from',  
    end_vendor_no INT(6) NOT NULL COMMENT 'Foreign key to the VENDOR.no for the vendor being shipped to',  
    shipment_duration INT(1) DEFAULT 1 COMMENT 'Duration in whole days shipment will take',  
    price FLOAT(5,5) NOT NULL COMMENT 'Price in US dollars per shipment lbs (down to 5 decimal places)',  
    is_flat_rate TINYINT(1) DEFAULT 0 COMMENT '1 if is flat rate regardless of weight, 0 if price is by lbs',  
    INDEX (shipping_vendor_no),  
    INDEX (start_vendor_no),  
    INDEX (end_vendor_no),  
    FOREIGN KEY (shipping_vendor_no) REFERENCES VENDOR (no),  
    FOREIGN KEY (start_vendor_no) REFERENCES VENDOR (no),  
    FOREIGN KEY (end_vendor_no) REFERENCES VENDOR (no)  
) TYPE = INNODB;

VENDOR 기본 키는 INT (6) 여야하며 두 테이블 모두 InnoDB 유형이어야합니다.

 

참조 페이지 https://stackoverflow.com/questions/6340

 

 

반응형

댓글