2

MySQL Workbench 5.2.45를 사용하여 MacOSX에 있습니다. EER 다이어그램 기능을 사용하여 데이터베이스를 설계 한 다음 생성하도록 포워드 엔지니어링을 시도했습니다. 내 데이터베이스는 내 로컬 서버에 저장합니다. 오류 1005 : 테이블을 만들 수 없습니다 (errno를 : 150) 나는 오류 코드 얻을MySQL Workbench - Forward Engineering - 오류 1005 : 테이블을 만들 수 없습니다. (errno : 150)

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES'; 

CREATE SCHEMA IF NOT EXISTS `Finance` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ; 
USE `Finance` ; 

-- ----------------------------------------------------- 
-- Table `Finance`.`DatabaseUser` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `Finance`.`DatabaseUser` (
    `ID` INT(11) NOT NULL AUTO_INCREMENT , 
    `FirstName` VARCHAR(255) NOT NULL , 
    `LastName` VARCHAR(255) NOT NULL , 
    `Tel` VARCHAR(255) NULL , 
    `Email` VARCHAR(255) NOT NULL, 
    `Password` VARCHAR(255) NOT NULL , 
    `Admin` CHAR(1) NOT NULL DEFAULT 'N' , 
    `Project1` CHAR(1) NOT NULL DEFAULT 'N' , 
    `Project2` CHAR(1) NOT NULL DEFAULT 'N' , 
    `Project3` CHAR(1) NOT NULL DEFAULT 'N' , 
    PRIMARY KEY (`ID`)) 
ENGINE = InnoDB; 


-- ----------------------------------------------------- 
-- Table `Finance`.`Entities` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `Finance`.`Entities` (
    `ID` INT(11) NOT NULL AUTO_INCREMENT , 
    `CreatorID` INT(11) NOT NULL , 
    `FullName` VARCHAR(255) NOT NULL , 
    `ShortName` VARCHAR(255) NULL , 
    PRIMARY KEY (`ID`) , 
    INDEX `Creator_idx` (`CreatorID` ASC) , 
    CONSTRAINT `CreatorEntities` 
    FOREIGN KEY (`CreatorID`) 
    REFERENCES `Finance`.`DatabaseUser` (`ID`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

-- ----------------------------------------------------- 
-- Table `Finance`.`Grant` 
-- ----------------------------------------------------- 
CREATE TABLE IF NOT EXISTS `Finance`.`Grant` (
    `ID` INT(11) NOT NULL AUTO_INCREMENT , 
    `CreatorID` INT(11) NOT NULL , 
    `DonorID` INT(11) NOT NULL , 
    `RecipientID` INT(11) NOT NULL , 
    `Name` VARCHAR(255) NOT NULL , 
    `Year` YEAR NOT NULL , 
    PRIMARY KEY (`ID`) , 
    INDEX `Creator_idx` (`CreatorID` ASC) , 
    INDEX `index3` (`DonorID` ASC, `RecipientID` ASC) , 
    CONSTRAINT `CreatorGrant` 
    FOREIGN KEY (`CreatorID`) 
    REFERENCES `Finance`.`DatabaseUser` (`ID`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `InstrumentGrant` 
    FOREIGN KEY (`DonorID` , `RecipientID`) 
    REFERENCES `Finance`.`Entities` (`ID` , `ID`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

USE `Finance` ; 


SET [email protected]_SQL_MODE; 
SET [email protected]_FOREIGN_KEY_CHECKS; 
SET [email protected]_UNIQUE_CHECKS; 

내가 포스트 (Error Code: 1005. Can't create table '...' (errno: 150))에서 제안 된 솔루션을 시도하고있다가 있지만이 될 것 같지 않습니다 문제. 1. 데이터 유형은 3. 외래 키 이름 같은 2. 참조하고있어 기본 키는 고유의 4. 테이블은 모두 InnoDB의 5. 없음 SET NULL의

것은 당신이 도와 주실 수 등 을 포함하지 않습니다 있습니다 있습니다 ?

+0

FK 제약 조건 중 어느 것이 실패합니까? 'show engine innodb status '는 중도에 묻혀있는 1 톤의 데이터를 "마지막 외래 키 오류"라고한다. 왜 당신이 1005/150을 얻는 지에 대한 자세한 내용을 알게 될 것입니다. –

+0

'오류 : 오류 1005 :'Finance.Grant '(errno : 150)' – FinanceGardener

+0

테이블을 만들 수 없으며 구문을 보면 권한 부여 테이블의 InstrumentGrant FK에있는 '(ID, ID)'비트가 표시됩니다. 펑키 보인다. 같은 필드에서 FK를 두 번 할 수 있는지 확신하지 못합니다. –

답변

1

허용 테이블에서 외래 키 제약 조건을 변경하십시오.

http://www.sqlfiddle.com/#!2/04945

CONSTRAINT `InstrumentGrant` 
    FOREIGN KEY (`RecipientID`) 
    REFERENCES `Entities` (`ID`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `InstrumentGrant_2` 
    FOREIGN KEY (`DonorID`) 
    REFERENCES `Entities` (`ID`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION 

이름 당신이 원하는대로 제약 조건을 참조하십시오.

+0

@MarcB 및 Slowcoder 내 문제를 해결 한 많은 감사합니다! 단일 제약 조건에서 같은 필드에 FK가 두 번 없습니다. – FinanceGardener

0

는 해결 :

수출 메뉴에서

,이 오류를 방지하기 위해 옵션 "INDEX 문을 CREATE 별도의 생성"을 선택합니다.