문제

나는 두 가지 테이블,'po'와'수신'

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$$

나가려고 연결하는 두 개의 테이블에 의해 정의 외국인 핵심'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 쿼리 위에 오류가 발생:

Error Code: 1005. Can't create table 'fourthwave.#sql-aec_11' (errno:150)

이 오류가 발생하므로 필드의 이름,'PO_ID'과'PO_NUMBER'모두에서 테이블은 다른가요?

도움이 되었습니까?

해결책

ALTER 테이블 후 ENNODB STATUS STATED SHATTS SHATTS TABLE을 사용하면 오류 메시지가 표시됩니다. 열은 not null '으로 정의됩니다.

ALTER TABLE `receive` 
  ADD CONSTRAINT `fk_po`
  FOREIGN KEY (`PO_NUMBER` )
  REFERENCES `po` (`PO_ID` )
  ON DELETE SET NULL
  ON UPDATE SET NULL
 , ADD INDEX `fk_po` (`PO_NUMBER` ASC);

SHOW ENGINE INNODB STATUS;
.

다른 팁

당신이 필요에 인덱스 PO_NUMBERreceive 테이블.필드를 참조하는 외국에서 핵심은 항상 있어야 색인.

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