[英]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.