MySQL Error 1215: Cannot add foreign key constraint

前端 未结 30 3401
予麋鹿
予麋鹿 2020-11-22 01:37

I am trying to forward engineer my new schema onto my db server, but I can\'t figure out why I am getting this error. I\'ve tried to search for the answer here, but everyth

30条回答
  •  面向向阳花
    2020-11-22 02:06

    when try to make foreign key when using laravel migration

    like this example:

    user table

        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();
        });
    }
    

    colors table

        public function up()
    {
        Schema::create('flights', function (Blueprint $table) {
            $table->increments('id');
            $table->string('color');
            $table->timestamps();
        });
    }
    

    sometimes properties didn't work

    [PDOException]
    SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
    

    this error happened because the foreign key (type) in [user table] is deferent from primary key (type) in [colors table]

    To solve this problem should change the primary key in [colors table]

    $table->tinyIncrements('id');


    When you use primary key $table->Increments('id');

    you should use Integer as a foreign key

        $table-> unsignedInteger('fk_id');
        $table->foreign('fk_id')->references('id')->on('table_name');
    

    When you use primary key $table->tinyIncrements('id');

    you should use unsignedTinyInteger as a foreign key

        $table-> unsignedTinyInteger('fk_id');
        $table->foreign('fk_id')->references('id')->on('table_name');
    

    When you use primary key $table->smallIncrements('id');

    you should use unsignedSmallInteger as a foreign key

        $table-> unsignedSmallInteger('fk_id');
        $table->foreign('fk_id')->references('id')->on('table_name');
    

    When you use primary key $table->mediumIncrements('id');

    you should use unsignedMediumInteger as a foreign key

        $table-> unsignedMediumInteger('fk_id');
        $table->foreign('fk_id')->references('id')->on('table_name');
    

提交回复
热议问题