如何添加外键?

发布于 2024-10-21 17:54:05 字数 642 浏览 4 评论 0原文

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

我想向其添加名为 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 中的外键)中。

为什么?

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

外键!!如果这是真的?

I create a table with name "temp1" - It has a primary key with name aa and some other fields. And I have another table with name temp2.

I want to add foreign key to it with name cc.

I wrote below code but it have some errors:

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

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

..But it have this error:

can't create table 'temp.temp2'

temp is my database name.

Edit:

I insert data into aa(primary key in temp1) but it doesn't import into

cc(foreign key in temp2).

why?

I thought if insert data in primary key it automatic insert into

foreign key!!if this true?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

静谧 2024-10-28 17:54:05

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

foreign key (cc) references temp1 (aa)

在创建表语句中或

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

之后。另外,您的表 temp1 的 SQL 是错误的 - 没有字段 a 来创建主键 - 我猜这只是您问题中的一个拼写错误。

You need to specify the foreign field you're linking to as well:

foreign key (cc) references temp1 (aa)

within the create table statement, or

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

afterwards. As well, your SQL for table temp1 is faulty - there's no field a to create a primary key on - I'm guessing that's just a typo in your question.

情绪 2024-10-28 17:54:05

来自 MySQL 外键文档

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

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

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

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

From the MySQL foreign key documentation:

If MySQL reports an error number 1005 from a CREATE TABLE statement, and the error message refers to error 150, table creation failed because a foreign key constraint was not correctly formed.

Reviewing your query, that is correct - you need to use:

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

When making a foreign key constraint, you need to specify the column the foreign key relates to in the parent table. SQL doesn't assume you want the primary key column, because there could be others.

半世蒼涼 2024-10-28 17:54:05

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

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

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

如果引用的表和列
未指定参考列
列表,然后是表描述符
参考表应包括
指定的唯一约束
主键

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

Your code is valid Standard SQL-92 syntax.

You can test this using the online Mimer SQL-92 Validator.

You can verify this by reading the SQL-92 spec, 11.8 "referential constraint definition", 2b):

If the referenced table and columns
does not specify a reference column
list, then the table descriptor of the
referenced table shall include a
unique constraint that specifies
PRIMARY KEY.

Sadly, mySQL is not SQL-92 compliant and it seems the reference column list is required.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文