2

我创建了一个带有名称的表"temp1"- 它有一个带有名称的主键aa和一些其他字段。我还有另一张名为 name 的桌子temp2

我想foreign key用 name 添加它cc

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

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 中的外键)。

为什么?

我想如果在主键中插入数据它会自动插入

外键!!如果这是真的?

4

3 回答 3

5

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

foreign key (cc) references temp1 (aa)

在 create table 语句中,或

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

然后。同样,您的表 temp1 的 SQL 是错误的 - 没有a可以在其上创建主键的字段 - 我猜这只是您的问题中的一个错字。

于 2011-03-13T18:19:14.340 回答
1

来自MySQL 外键文档

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

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

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

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

于 2011-03-13T18:22:29.093 回答
0

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

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

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

如果被引用的表和列未指定引用列列表,则被引用表的表描述符应包括一个唯一约束,该约束指定 PRIMARY KEY.

遗憾的是,mySQL 不符合 SQL-92,而且似乎需要参考列列表。

于 2011-03-14T09:37:26.973 回答