문제

한 공급업체에서 다른 공급업체로 제품을 배송하는 데 소요되는 날짜와 비용을 추적하는 테이블이 있습니다.우리는 (훌륭하게도 :p) 배송 공급업체(FedEx, UPS)와 제품 취급 공급업체(생각해 보세요...)를 모두 저장했습니다.Dunder Mifflin)을 "VENDOR" 테이블에 추가합니다.따라서 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;

이중 기본 키 정의를 제거하도록 편집되었습니다...


네, 안타깝게도 문제가 해결되지 않았습니다.이제 나는 다음을 얻습니다:

테이블을 만들 수 없습니다 ./내 DB 이름이 제거되었습니다./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 유형이어야 합니다.

다른 팁

여기에서 코드를 실행했는데 오류 메시지에 설정 중이라는 내용이 표시되었습니다(맞습니다!). ID 필드를 기본 키로 두 번 사용하세요.

공급 업체 테이블의 정의를 제공 할 수 있습니까?

나는 그것을 알아.VENDOR 테이블은 MyISAM이었습니다...(두 가지 모두 INNODB로 만들도록 답변을 편집했습니다.)

(어떤 이유 ~ 아니다 VENDOR 유형을 INNODB로 전환하시겠습니까?)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top