SQLSTATE [42000]:语法错误或访问冲突:1075表定义不正确;只能有一个自动列,必须将其定义为键

时间:2017-02-05 14:48:28

标签: php mysql laravel

public function up()
{
    Schema::create('jadwal_praks', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('thnajrn_id', 10)->unsigned();
        $table->foreign('thnajrn_id')->references('id')->on('tahun_ajarans');
        $table->integer('prak_id', 10)->unsigned();
        $table->foreign('prak_id')->references('Prak_kode')->on('mata_praks');
        $table->integer('hari_id', 10)->unsigned();
        $table->foreign('hari_id')->references('id')->on('haris');
        $table->integer('jam_id', 10)->unsigned();
        $table->foreign('jam_id')->references('id')->on('jams');
        $table->integer('ruang_id', 10)->unsigned();
        $table->foreign('ruang_id')->references('id')->on('ruangs');
        $table->integer('kap_id', 10)->unsigned();
        $table->foreign('kap_id')->references('id')->on('kapasitas');

        $table->timestamps();
        $table->rememberToken();
    });
}

运行php artisan migrate

之后
  

[Illuminate \ Database \ QueryException] SQLSTATE [42000]:语法错误   或访问冲突:1075表定义不正确;可以有   只有一个自动组合,必须将其定义为键(SQL:create   table jadwal_praksid int unsigned not null auto_increment
  主键,thnajrn_id int unsigned not null auto_increment primary   key,prak_id int unsigned not null auto _increment primary key,   hari_id int unsigned not null auto_increment主键,jam_id   int unsigned not nul l auto_increment primary key,ruang_id int   unsigned not null auto_increment primary key,kap_id int unsigned
  not null auto_increment主键,created_at timestamp null,   updated_at时间戳null,remember_token v archar(100)null)   默认字符集utf8 collat​​e utf8_unicode_ci)

这个

  

[PDOException] SQLSTATE [42000]:语法错误或访问冲突:   1075表定义不正确;只能有一个自动列和   它必须被定义为一个键

3 个答案:

答案 0 :(得分:6)

根据我的观察,我会说你应该删除你添加到外国字段的default值(例如):

$table->integer('thnajrn_id', 10)->unsigned(); 

要:

$table->integer('thnajrn_id')->unsigned();
  PS:有了类似的经验,我现在知道这适用于我在Laravel 5.2中使用的一个项目。*

希望这会有所帮助:)

答案 1 :(得分:0)

当您使用$ table-> integer('thnajrn_id',10)-> unsigned();时这意味着您将第二个参数设置为true,它表示AutoIncrement

使用 table-> integer('thnajrn_id')-> length(10)-> unsigned();

https://laracasts.com/discuss/channels/general-discussion/why-am-i-getting-a-database-error-on-migration

答案 2 :(得分:0)

当您使用 $table->unsignedBigInteger('account_id')->nullable(); 时,您仍然会遇到相同的错误,因为 nullable() 产生的默认值可能会产生相同的错误。所以总是把你的外键留空,无论是 nullable 还是 default(0)