使用KEY / CONSTRAINT而不是FOREIGN KEY之间的区别?

时间:2013-09-01 20:06:39

标签: php mysql laravel

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

Schema::table('posts', function($table){
    $table->integer('category_id')->unsigned();
    $table->foreign('category_id')
          ->references('id')
          ->on('categories');
});

生成MySQL输出(来自SHOW CREATE TABLE posts

`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`)

为什么Laravel使用KEYCONSTRAINT ... FOREIGN KEY ... REFERENCES ...来创建新索引而不是引用外键的列上更常见的FOREIGN KEY ... REFERENCES ...

1 个答案:

答案 0 :(得分:0)

因为MySql只是忽略了内联引用规范,所以他们在这里写一下:http://dev.mysql.com/doc/refman/5.6/en/create-table.html

  

MySQL无法识别或支持“内联参考规范”   (在SQL标准中定义),其中引用被定义为   列规范的一部分。 MySQL接受REFERENCES子句   仅当指定为单独的FOREIGN KEY规范的一部分时。