我试图将我的新模式转发到我的数据库服务器上,但我不知道为什么我会得到这个错误。
我试图在这里寻找答案,但我所找到的一切都表明,要么将数据库引擎设置为InnoDB,要么确保我试图用作外键的键是它们自己表中的主键。如果我没记错的话,这两件事我都做过。我还能做什么?
Executing SQL script in server
ERROR: Error 1215: Cannot add foreign key constraint
-- -----------------------------------------------------
-- Table `Alternative_Pathways`.`Clients_has_Staff`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Alternative_Pathways`.`Clients_has_Staff` (
`Clients_Case_Number` INT NOT NULL ,
`Staff_Emp_ID` INT NOT NULL ,
PRIMARY KEY (`Clients_Case_Number`, `Staff_Emp_ID`) ,
INDEX `fk_Clients_has_Staff_Staff1_idx` (`Staff_Emp_ID` ASC) ,
INDEX `fk_Clients_has_Staff_Clients_idx` (`Clients_Case_Number` ASC) ,
CONSTRAINT `fk_Clients_has_Staff_Clients`
FOREIGN KEY (`Clients_Case_Number` )
REFERENCES `Alternative_Pathways`.`Clients` (`Case_Number` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Clients_has_Staff_Staff1`
FOREIGN KEY (`Staff_Emp_ID` )
REFERENCES `Alternative_Pathways`.`Staff` (`Emp_ID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
SQL脚本执行完成:语句:7成功,1失败
下面是父表的SQL。
CREATE TABLE IF NOT EXISTS `Alternative_Pathways`.`Clients` (
`Case_Number` INT NOT NULL ,
`First_Name` CHAR(10) NULL ,
`Middle_Name` CHAR(10) NULL ,
`Last_Name` CHAR(10) NULL ,
`Address` CHAR(50) NULL ,
`Phone_Number` INT(10) NULL ,
PRIMARY KEY (`Case_Number`) )
ENGINE = InnoDB
CREATE TABLE IF NOT EXISTS `Alternative_Pathways`.`Staff` (
`Emp_ID` INT NOT NULL ,
`First_Name` CHAR(10) NULL ,
`Middle_Name` CHAR(10) NULL ,
`Last_Name` CHAR(10) NULL ,
PRIMARY KEY (`Emp_ID`) )
ENGINE = InnoDB
当使用Laravel迁移时尝试创建外键时,就像下面的例子:
用户表
public function up()
{
Schema::create('flights', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->TinyInteger('color_id')->unsigned();
$table->foreign('color_id')->references('id')->on('colors');
$table->timestamps();
});
}
颜色表
public function up()
{
Schema::create('flights', function (Blueprint $table) {
$table->increments('id');
$table->string('color');
$table->timestamps();
});
}
有时候属性不起作用:
[PDOException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
发生此错误是因为[用户表]中的外键(类型)与[颜色表]中的主键(类型)不同。
要解决这个问题,你应该改变[colors table]中的主键:
($ table - > tinyIncrements’id’);
当你使用主键$table->Increments('id');时,你应该使用Integer作为外键:
$table->unsignedInteger('fk_id');
$table->foreign('fk_id')->references('id')->on('table_name');
$table->tinyIncrements('id');你应该使用unsignedTinyInteger作为外键:
$table->unsignedTinyInteger('fk_id');
$table->foreign('fk_id')->references('id')->on('table_name');
当你使用主键$table->smallIncrements('id');你应该使用unsignedSmallInteger作为外键:
$table->unsignedSmallInteger('fk_id');
$table->foreign('fk_id')->references('id')->on('table_name');
当你使用主键$table->mediumIncrements('id');你应该使用unsignedMediumInteger作为外键:
$table->unsignedMediumInteger('fk_id');
$table->foreign('fk_id')->references('id')->on('table_name');
当使用Laravel迁移时尝试创建外键时,就像下面的例子:
用户表
public function up()
{
Schema::create('flights', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->TinyInteger('color_id')->unsigned();
$table->foreign('color_id')->references('id')->on('colors');
$table->timestamps();
});
}
颜色表
public function up()
{
Schema::create('flights', function (Blueprint $table) {
$table->increments('id');
$table->string('color');
$table->timestamps();
});
}
有时候属性不起作用:
[PDOException]
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
发生此错误是因为[用户表]中的外键(类型)与[颜色表]中的主键(类型)不同。
要解决这个问题,你应该改变[colors table]中的主键:
($ table - > tinyIncrements’id’);
当你使用主键$table->Increments('id');时,你应该使用Integer作为外键:
$table->unsignedInteger('fk_id');
$table->foreign('fk_id')->references('id')->on('table_name');
$table->tinyIncrements('id');你应该使用unsignedTinyInteger作为外键:
$table->unsignedTinyInteger('fk_id');
$table->foreign('fk_id')->references('id')->on('table_name');
当你使用主键$table->smallIncrements('id');你应该使用unsignedSmallInteger作为外键:
$table->unsignedSmallInteger('fk_id');
$table->foreign('fk_id')->references('id')->on('table_name');
当你使用主键$table->mediumIncrements('id');你应该使用unsignedMediumInteger作为外键:
$table->unsignedMediumInteger('fk_id');
$table->foreign('fk_id')->references('id')->on('table_name');