반응형
한 공급 업체에서 다른 공급 업체로 제품을 배송하는 데 소요되는 날짜와 비용을 추적하는 테이블이 있습니다. 우리는 (훌륭하게 : 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
반응형
'MySql' 카테고리의 다른 글
MySQL PHP / MySQL의 특수 문자 (0) | 2020.10.06 |
---|---|
MySQL Codeigniter Select_Sum은 숫자 값이 아닌 "배열"을 반환합니까? (0) | 2020.10.06 |
MySQL MySql에서 자동 증가를 기본 키로 사용할 수 있습니까? (0) | 2020.10.06 |
MySQL 삭제 된 행이 차지하는 공간이 재사용됩니까? (0) | 2020.10.06 |
MySQL PHP를 사용하여 MySQL에 행이 있는지 확인하는 방법 (0) | 2020.10.06 |
댓글