Я нахожусь на MacOSX с помощью MySQL Workbench 5.2.45 Я разработал базу данных, используя функциональность диаграммы 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. Типы данных одни и те же 2. Я ссылки первичные ключи 3. Основные иностранные имена являются уникальными 4. Таблицы InnoDB все 5. Нет SET NULL не участвует и т.д.
Можете ли вы помочь ?
Какое из ограничений FK не работает? и 'show engine innodb status' будет выгружать тонну данных, похоронен в середине которой является« последней ошибкой внешнего ключа ». у него будет больше информации о том, почему вы получаете 1005/150. –
Извините, забыл упомянуть об этом: «Ошибка: Ошибка 1005: не удается создать таблицу« Finance.Grant »(errno: 150)« – FinanceGardener
»и, посмотрев на синтаксис, бит' (ID, ID) в таблице инструментов Grant InstrumentGrant FK выглядит фанки. не уверен, что вы можете FK в одно и то же поле дважды. –