나는 두 테이블, '포'와 '외부 키를 정의하여 내가 두 테이블을 연결하기 위해 노력하고있어MySQL의 : 오류 메시지가 테이블을 만들 수 없습니다 (errno를 : 150)
CREATE TABLE `po` (
`PO_ID` bigint(20) NOT NULL,
`SERVICE_TYPE` bit(1) DEFAULT NULL,
`ENTRY_DATE` date NOT NULL,
`RECEIPT_DATE` date DEFAULT NULL,
`TURNOVER` date DEFAULT NULL,
`MOBILIZATION` date DEFAULT NULL,
`SITE_NAME` varchar(255) NOT NULL,
`SITE_CODE` varchar(45) DEFAULT NULL,
`SITE_TIN` varchar(45) DEFAULT NULL,
`SITE_ADDRESS` varchar(255) NOT NULL,
`COST` decimal(11,2) NOT NULL,
`XML` text,
PRIMARY KEY (`PO_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
CREATE TABLE `receive` (
`RECEIPT_ID` varchar(100) NOT NULL,
`RECEIPT_DATE` date NOT NULL,
`PO_NUMBER` bigint(20) NOT NULL,
`SUPPLIER_ID` int(11) NOT NULL,
PRIMARY KEY (`RECEIPT_ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8$$
를'받을 '을 가지고
Error Code: 1005. Can't create table 'fourthwave.#sql-aec_11' (errno:150)
내가 Fi를 때문에이 오류가 점점 오전 : '테이블에'fk_po는
ALTER TABLE `fourthwave`.`receive`
ADD CONSTRAINT `fk_po`
FOREIGN KEY (`PO_NUMBER`)
REFERENCES `fourthwave`.`po` (`PO_ID`)
ON DELETE SET NULL
ON UPDATE SET NULL
, ADD INDEX `fk_po` (`PO_NUMBER` ASC)
그러나, ALTER 쿼리는 위의 오류가 발생합니다 '가 나타납니다 두 테이블의 'PO_ID'및 'PO_NUMBER'이 (가) 서로 다릅니다.
이것은 효과가 있습니까? 인덱스와 FK 제약 조건을 같은 이름으로 가질 수 있습니까? –
예, 작동합니다. 다른 이름을 붙일 수는 있지만,이 인덱스를 만들지 않으면 MySQL은 같은 이름으로 인덱스를 생성합니다. – Devart
흥미 롭습니다. FK를 추가하고 제약 조건의 이름을 남기면 MySQL은 항상 자동으로 some_table_ibfk_1과 같은 것을 채 웁니다. 이것은 인덱스와 FK에 대한 이름 충돌이 없다는 것을 의미합니다. –