Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用ALTERTABLE命令创建MySQL外键_Mysql_Sql_Foreign Keys_Alter Table_Mysql Error 1005 - Fatal编程技术网

使用ALTERTABLE命令创建MySQL外键

使用ALTERTABLE命令创建MySQL外键,mysql,sql,foreign-keys,alter-table,mysql-error-1005,Mysql,Sql,Foreign Keys,Alter Table,Mysql Error 1005,我使用MySQL Workbench创建了一些表,然后使用forward“forward engineer”创建脚本来创建这些表。但是,这些脚本给我带来了一些问题。其中之一涉及外键。所以我尝试使用ALTERTABLE创建单独的外键添加,但仍然遇到问题。下面是代码(我留下的set语句、drop/create语句……尽管我认为它们对此不重要): 由此产生的错误是: 错误代码:1005无法创建表“mydb.user_space”(错误号:150) 有人知道我到底做错了什么吗??还有其他人对mysql

我使用MySQL Workbench创建了一些表,然后使用forward“forward engineer”创建脚本来创建这些表。但是,这些脚本给我带来了一些问题。其中之一涉及外键。所以我尝试使用ALTERTABLE创建单独的外键添加,但仍然遇到问题。下面是代码(我留下的set语句、drop/create语句……尽管我认为它们对此不重要):


由此产生的错误是:
错误代码:1005无法创建表“mydb.user_space”(错误号:150)

有人知道我到底做错了什么吗??还有其他人对mysql工作台的脚本生成有问题吗?这是一个很好的工具,但令人恼火的是,它输出的脚本不适合我

[仅供参考,以下是它自动生成的脚本:

 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

 DROP SCHEMA IF EXISTS `mydb` ;
 CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;

 -- -----------------------------------------------------
 -- Table `mydb`.`User`
 -- -----------------------------------------------------
 DROP TABLE IF EXISTS `mydb`.`User` ;

 CREATE  TABLE IF NOT EXISTS `mydb`.`User` (
   `UserName` VARCHAR(35) NOT NULL ,
   `Num_Accts` INT NOT NULL ,
   `Password` VARCHAR(45) NULL ,
   `Email` VARCHAR(45) NULL ,
   `User_ID` INT NOT NULL AUTO_INCREMENT ,
   PRIMARY KEY (`User_ID`) )
 ENGINE = InnoDB;


 -- -----------------------------------------------------
 -- Table `mydb`.`User_Space`
 -- -----------------------------------------------------
 DROP TABLE IF EXISTS `mydb`.`User_Space` ;

 CREATE  TABLE IF NOT EXISTS `mydb`.`User_Space` (
   `User_Space_ID` INT NOT NULL AUTO_INCREMENT ,
   PRIMARY KEY (`User_Space_ID`) ,
   INDEX `User_ID` () ,
   CONSTRAINT `User_ID`
     FOREIGN KEY ()
     REFERENCES `mydb`.`User` ()
     ON DELETE NO ACTION
     ON UPDATE NO ACTION)
 ENGINE = InnoDB;


 SET SQL_MODE=@OLD_SQL_MODE;
 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
**
谢谢!]

我没有使用MySQL Workbench生成很多模式,但我在脚本中发现了问题。
User\u Space
表中的外键定义试图在
User
表中未索引的列上创建外键。如果更改
用户
定义以在
用户名
上建立索引,如下所示:

  CREATE  TABLE IF NOT EXISTS `mydb`.`User` (
   `UserName` VARCHAR(35) NOT NULL ,
   `Num_Accts` INT NOT NULL ,
   `Password` VARCHAR(45) NULL ,
   `Email` VARCHAR(45) NULL ,
   `User_ID` INT NOT NULL AUTO_INCREMENT ,
   PRIMARY KEY (`User_ID`),
   INDEX(`UserName`)
 )
 ENGINE = InnoDB;
。。。剧本会成功的。听起来MySQL Workbench在生成外键定义时可能没有考虑索引。我不确定您是否可以在模式图中修复这个问题,或者它是否是程序中的一个更大的错误,但我想看看您是否可以在正确的位置添加索引定义,并确定这是否可以修复脚本生成

  CREATE  TABLE IF NOT EXISTS `mydb`.`User` (
   `UserName` VARCHAR(35) NOT NULL ,
   `Num_Accts` INT NOT NULL ,
   `Password` VARCHAR(45) NULL ,
   `Email` VARCHAR(45) NULL ,
   `User_ID` INT NOT NULL AUTO_INCREMENT ,
   PRIMARY KEY (`User_ID`),
   INDEX(`UserName`)
 )
 ENGINE = InnoDB;