我有两个表格:

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

表合着:ID(INTEGER) author1ID(INTEGER), author2ID(INTEGER), paper_ID(INTEGER)(ID的共同撰写文引用,通过这种链路)

我想添加外国主要制约因素使得author1ID和author2ID在合着指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;

这种执行得很好,但是,当我试图添加元组,其中包含一个author1ID不存在的ID,它允许我这么做,意外键的制约是不工作。

我需要做什么不同?我尝试使两个表中选在创建发言,但然后我会得到一个错误1005不能创建表。

有帮助吗?

解决方案

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

为了设立一个外国的关键之间关系的两个MySQL表、三个条件必须满足:

  1. 这两个表格必须的少表的类型。

  2. 该领域中使用外国的关键关系必须编入索引。

  3. 该领域中使用外国的关键关系必须是类似的数据类型。

重要的是:对于非少表、外键条款被忽略。

其他提示

您可以尝试 'ENGINE = InnoDB的'

外键约束/键约束与InnoDB表只工作:)

- 干杯

首先:你需要定义涉及的外键的表,是InnoDB。 MyISAM数据根本不支持外键。

这里您的问题(错误1005)是有点混乱。如果你做一个ALTER TABLE,这意味着存在已在另一个表中没有引用的外键字段中的一个值。

当创建表,确保,您首先创建“父”表,然后在第二和第三表。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top