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

标签 mysql

我根据在 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` )

关于mysql 创建表脚本失败 - 错误 150,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15981957/

相关文章:

MySQL游标问题: what did i do wrong?

mysql - 如何在mysql中根据小时拆分登录和注销时间

php - 如何检查php上传文件的目录是否正确?

mysql - 使用 AJAX 从 PHP 文件调用一个查询,该文件有多个

php - 在 3 个日期范围内搜索记录

php - 从与数据库中数据不同的链接复制文档

php - mysql_connect() : Headers and client library minor version mismatch Library:100005

MySQL - 条件的正确位置在哪里?

php - 使用php将XML数据插入mysql

php-mysql 从数据库中获取下一个和上一个 id