如何添加外键?

时间:2011-03-13 18:14:32

标签: mysql sql foreign-keys mysql-error-1005

我创建了一个名为"temp1"的表 - 它有一个名为aa的主键和其他一些字段。我还有一个名为temp2的表。

我想将foreign key添加到名称为cc的<{1}}。

我在下面写了代码,但它有一些错误:

create table temp1 (    
  aa int,    
  primary key(aa)    
);

create table temp2 (
  bb int,
  cc int,
  primary key(bb),
  foreign key(cc) references temp1
);

..但它有这个错误:

  

无法创建表'temp.temp2'

temp是我的数据库名称。

Edit:

我将数据插入aa(temp1中的主键),但不会导入

cc(temp2中的外键)。

为什么?

我认为如果在主键中插入数据,它会自动插入

外键!!如果这是真的吗?

3 个答案:

答案 0 :(得分:5)

您还需要指定要链接的外部字段:

foreign key (cc) references temp1 (aa)

在create table语句中,或

alter table temp2 add foreign key (cc) references temp1 (aa)

之后。同样,你的表temp1的SQL是错误的 - 没有字段a来创建主键 - 我猜你的问题只是一个错字。

答案 1 :(得分:1)

来自MySQL foreign key documentation

  

如果MySQL从CREATE TABLE语句报告错误号1005,并且错误消息引用错误150,则表创建失败,因为未正确形成外键约束。

检查您的查询,这是正确的 - 您需要使用:

CREATE TABLE temp2 (
  bb int,
  cc int,
  PRIMARY KEY (bb),
  FOREIGN KEY (cc) REFERENCES temp1(aa)
);

在创建外键约束时,需要在父表中指定外键与之关联的列。 SQL不假设您需要主键列,因为可能还有其他列。

答案 2 :(得分:0)

您的代码是有效的标准SQL-92语法。

您可以使用在线Mimer SQL-92 Validator进行测试。

您可以通过阅读SQL-92规范,11.8“参照约束定义”,2b来验证这一点:

  

如果引用了表和列   没有指定参考列   列表,然后是表的描述符   引用表应包括a   指定的唯一约束   PRIMARY KEY

可悲的是,mySQL不符合SQL-92,似乎需要参考列列表。