Php 使用键/约束而不是外键之间的区别?

Php 使用键/约束而不是外键之间的区别?,php,mysql,laravel,Php,Mysql,Laravel,我正在使用Laravel框架的迁移功能在数据库中创建外键。使用代码 Schema::table('posts', function($table){ $table->integer('category_id')->unsigned(); $table->foreign('category_id') ->references('id') ->on('categories'); }); 生成MySQL输出(从sh

我正在使用Laravel框架的迁移功能在数据库中创建外键。使用代码

Schema::table('posts', function($table){
    $table->integer('category_id')->unsigned();
    $table->foreign('category_id')
          ->references('id')
          ->on('categories');
});
生成MySQL输出(从
showcreatetableposts


为什么Laravel使用
约束。。。外键。。。引用…
以创建新索引,而不是更常见的
外键。。。引用…
在引用外键的列上?

因为MySql只是忽略内联引用规范,所以他们在这里写到:

MySQL不识别或不支持“内联引用规范” (如SQL标准中所定义),其中引用定义为 列规范的一部分。MySQL接受REFERENCES子句 仅当指定为单独外键规范的一部分时

`category_id` int(10) unsigned NOT NULL,
KEY `posts_category_id_foreign` (`category_id`),
CONSTRAINT `posts_category_id_foreign` FOREIGN KEY (`category_id`) REFERENCES `categories` (`id`)