mysql简单的问题,与外国的钥匙
-
26-09-2019 - |
题
我有两个表格:
表作者: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表、三个条件必须满足:
这两个表格必须的少表的类型。
该领域中使用外国的关键关系必须编入索引。
该领域中使用外国的关键关系必须是类似的数据类型。
重要的是:对于非少表、外键条款被忽略。
其他提示
您可以尝试 'ENGINE = InnoDB的'
外键约束/键约束与InnoDB表只工作:)
- 干杯
首先:你需要定义涉及的外键的表,是InnoDB。 MyISAM数据根本不支持外键。
这里您的问题(错误1005)是有点混乱。如果你做一个ALTER TABLE
,这意味着存在已在另一个表中没有引用的外键字段中的一个值。
当创建表,确保,您首先创建“父”表,然后在第二和第三表。