我知道外键是什么。但是添加
之间有什么区别 CONSTRAINT test1
??
和
没有它吗?代码" CONSTRAINT"它究竟是做什么的,因为无论如何你都可以添加没有该代码的外键。
谢谢, 编
答案 0 :(得分:0)
Just RTM:
https://dev.mysql.com/doc/refman/5.6/en/create-table-foreign-keys.html
检查这个小提琴:
http://sqlfiddle.com/#!9/9fb10
if($e instanceof HttpException && $e->getStatusCode() == 403){
return response("403 Forbidden error response");
}
create table a (id int NOT NULL AUTO_INCREMENT, title varchar(20), PRIMARY KEY (`id`));
create table b (id int NOT NULL AUTO_INCREMENT, title varchar(20), PRIMARY KEY (`id`),
a_id int,
CONSTRAINT a_id FOREIGN KEY (a_id) REFERENCES a(id) )ENGINE=INNODB ;
create table c (id int NOT NULL AUTO_INCREMENT, title varchar(20), PRIMARY KEY (`id`),
a_id int,
CONSTRAINT a_id_C FOREIGN KEY (a_id) REFERENCES a(id) )ENGINE=INNODB ;
#CONSTRAINT a_id FOREIGN KEY (a_id) REFERENCES a(id) )ENGINE=INNODB ;
create table d (id int NOT NULL AUTO_INCREMENT, title varchar(20), PRIMARY KEY (`id`),
a_id int,
FOREIGN KEY (a_id) REFERENCES a(id) )ENGINE=INNODB ;
的想法是针对整个数据库创建唯一名称。
因此,如果您创建了CONSTRAINT
索引,数据库将检查并拒绝任何在任何其他表上创建具有相同名称的索引的尝试。
以上示例如果您尝试取消注释
CONSTRAINT a_id
对于#CONSTRAINT a_id FOREIGN KEY (a_id) REFERENCES a(id)
表,mysql服务器将警告错误消息,因为c
已用于a_id
表。
与此同时,如果您不使用b
,则可以使用与表CONSTRAINT
相同的名称创建索引。