Я перепрограммировал сценарий из модели, созданной в WorkBench, но скрипт продолжает работать с ошибкой. Он не работает во второй таблице создания:mysql create table script failed - ошибка 150
CREATE TABLE IF NOT EXISTS `myDatabase`.`UserProfile` (
`ProfileId` INT NOT NULL AUTO_INCREMENT ,
`FirstName` VARCHAR(45) NULL ,
`LastName` VARCHAR(45) NULL ,
`Gender` CHAR(1) NULL ,
`DOB` DATETIME NULL ,
`HairColor` VARCHAR(20) NULL DEFAULT 'No Answer',
`EyeColor` VARCHAR(20) NULL DEFAULT 'No Answer',
`Height` VARCHAR(10) NULL DEFAULT 'No Answer',
`Weight` VARCHAR(45) NULL DEFAULT 'Average',
`UserId` VARCHAR(45) NOT NULL ,
PRIMARY KEY ( `ProfileId`) ,
CONSTRAINT `FK_User_Profile` FOREIGN KEY ( `UserId`) REFERENCES `OurAgreement`.`UserAccount` (
`UserId`
) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = INNODB;
Я считаю, что ошибка 150 является проблемой внешнего ключа. Таблица, связанная с этим FK, создает сначала скрипт, поэтому он существует до того, как будет предпринято это ограничение. Вот DDL для этой таблицы:
CREATE TABLE IF NOT EXISTS `mydatabase`.`UserAccount` (
`UserId` INT NOT NULL AUTO_INCREMENT ,
`Login` VARCHAR(20) CHARACTER SET 'utf8' COLLATE 'utf8_unicode_ci' NOT NULL ,
`Password` CHAR(64) NOT NULL ,
`Email` VARCHAR(45) NULL ,
PRIMARY KEY (`UserId`))
ENGINE = InnoDB;
Любые идеи, что происходит?
EDIT ============================
стол с 2 FKS:
CREATE TABLE IF NOT EXISTS `MyDatabase`.`Answer` (
`AnswerId` INT NOT NULL ,
`QuestionId` INT NOT NULL ,
`ProfileId` INT NOT NULL ,
PRIMARY KEY ( `AnswerId`) ,
INDEX `ProfileId_idx` ( `ProfileId` ASC) ,
INDEX `QuestionId_idx` ( `QuestionId` ASC) ,
CONSTRAINT `FK_Question_Answer` FOREIGN KEY ( `QuestionId`) REFERENCES `MyDatabase`.`Question` (
`QuestionId`
) ON DELETE NO ACTION ON UPDATE CASCADE ,
CONSTRAINT `FK_Answer_Profile` FOREIGN KEY ( `ProfileId`) REFERENCES `MyDatabase`.`UserProfile` (
`ProfileId`
) ON DELETE NO ACTION ON UPDATE CASCADE
) ENGINE = INNODB;
здесь вы идете, вторая часть сделает это. – Sebas
@Sebas Оба они необходимы^_^ – hjpotter92
да, вы правы, я на самом деле означал, что вторая часть закончит решение проблемы. – Sebas