MySQL工作台 - 正向工程 - 错误1005:无法创建表(错误:150)
问题描述:
我在MacOSX上使用MySQL Workbench 5.2.45我设计了一个使用EER Diagram功能的数据库,然后尝试正向工程来生成我的数据库放在我的本地服务器上。我得到的错误代码:错误1005:无法创建表(错误:150)MySQL工作台 - 正向工程 - 错误1005:无法创建表(错误: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.数据类型是相同的 2.我引用主键 3.外键的名称是唯一 4.表是所有的InnoDB 5.无SET NULL参与 等
能否请你帮?
答
更改授予表中的外键约束。
参考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 2013-02-21 22:32:50
答
解决:
在出口菜单中,选择“生成单独的CREATE INDEX语句”选项,以避免此错误。
哪些FK约束失败?和'显示引擎innodb状态'将会倾倒出大量的数据,埋在它的中间是“最后的外键错误”。它会有更多关于你为什么获得1005/150的细节。 – 2013-02-21 22:09:13
对不起,忘了提及这个'错误:错误1005:无法创建表'Finance.Grant'(errno:150)' – FinanceGardener 2013-02-21 22:11:29
并查看语法,授予表的InstrumentGrant FK中的'(ID,ID)'位看起来很时髦。不知道你可以像这样两次FK到同一场。 – 2013-02-21 22:15:54