首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql外键的简单问题

问mysql外键的简单问题
EN

Stack Overflow用户
提问于 2010-10-26 04:43:56
回答 3查看 284关注 0票数 0

我有两张表:

表作者: ID (整数)、author_name (VARCHAR)、first_name (VARCHAR)、last_name (VARCHAR)、preferred_name (VARCHAR)。

表CoAuthored: ID (整数) author1ID (整数),author2ID (整数),paper_ID (整数)(该链接引用的合著论文ID)

我想添加外键约束,以便CoAuthored中的author1ID和author2ID引用Author中的ID。我这样定义这些表:

代码语言:javascript
复制
CREATE TABLE Author(ID INT, author_name VARCHAR(100), preferred_name VARCHAR(100), first_name VARCHAR(100), last_name VARCHAR(100), PRIMARY KEY(ID)) ENGINE=INNODB;

CREATE TABLE CoAuthored(ID INT, author1ID INT, author2ID INT, paper_ID INT);

这是我创建外键的尝试:

代码语言:javascript
复制
ALTER TABLE CoAuthored ADD foreign key (author1ID) references Author(ID) on delete cascade on update cascade;

这可以很好地执行,但是当我尝试添加一个包含ID中不存在的author1ID的元组时,它允许我这样做,这意味着外键约束不起作用。

我需要做些什么不同的事情?我尝试在create语句中将两个表都创建为ENGINE=INNODB,但随后得到错误1005can‘t create table。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-26 04:51:50

来自:https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-6035435.html

为了在两个MySQL表之间建立外键关系,必须满足三个条件:

  1. 两个表都必须是InnoDB表类型。
  2. 必须为外键关系中使用的字段编制索引。
  3. 外键关系中使用的字段必须在数据类型上相似。

要点:对于非InnoDB表,忽略FOREIGN KEY子句。

票数 0
EN

Stack Overflow用户

发布于 2010-10-26 04:52:21

你能试试“ENGINE=InnoDB”吗?

外键约束/键约束仅适用于InnoDB表:)

--干杯

票数 0
EN

Stack Overflow用户

发布于 2010-10-26 04:53:02

首先:您需要将所有与外键相关的表定义为InnoDB。MyISAM根本不支持外键。

这里的问题(错误1005)有点令人困惑。如果执行ALTER TABLE,则意味着其中一个外键字段中存在一个值,而该值在另一个表中没有引用。

在创建表时,请确保先创建“父”表,然后创建第二个和第三个表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4018693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档