mysql外键的简单问题

时间:2010-10-25 20:43:56

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

我有两张桌子:

表作者: ID(INTEGER), author_name(VARCHAR), first_name(VARCHAR), last_name(VARCHAR), preferred_name(VARCHAR)。

表格共同作者: ID(整数) author1ID(INTEGER), author2ID(INTEGER), paper_ID(INTEGER)(此链接引用的共同撰写论文的ID)

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

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);

这是我尝试创建外键:

ALTER TABLE CoAuthored ADD foreign key (author1ID) references Author(ID) on delete cascade on update cascade;

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

我需要做些什么不同的事情?我尝试在create语句中创建两个表ENGINE = INNODB,但后来我得到一个ERROR 1005无法创建表。

3 个答案:

答案 0 :(得分:0)

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

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

  1. 两个表必须是InnoDB表类型。

  2. 必须将外键关系中使用的字段编入索引。

  3. 外键关系中使用的字段在数据类型中必须相似。

  4. 重要说明:对于非InnoDB表,将忽略FOREIGN KEY子句。

答案 1 :(得分:0)

你能试试'ENGINE = InnoDB'

吗?

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

- 干杯

答案 2 :(得分:0)

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

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

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