繁体   English   中英

mysql创建表脚本失败 - 错误150

[英]mysql create table script fails - error 150

我从我在WorkBench中创建的模型转发了一个脚本,但脚本仍然失败。 它在第二个创建表上失败:

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;

有什么想法发生了什么?

编辑============================

有2个FK的桌子:

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;

如果

`UserId` INT NOT NULL AUTO_INCREMENT

在原始表中,您需要在派生表中使用完全相同的语法:

`UserId` VARCHAR( 45 ) NOT NULL 

应该

`UserId` INT NOT NULL 

此外,您需要在两个表中索引UserId字段。 因为它是在一个 ,所以没有必要存在。 在另一个补充:

INDEX `uid`( `UserId` )

CREATE TABLE IF NOT EXISTS  `myDatabase`.`UserProfile`

你引用数据库中的表OurAgreement

REFERENCES  `OurAgreement`.`UserAccount`

但是您之前创建的UserAccount表位于mydatabase

CREATE  TABLE IF NOT EXISTS `mydatabase`.`UserAccount`

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM