Mysql 一个简单的外键问题
我有两张桌子: 表作者: ID(整数), 作者姓名(VARCHAR), 名字(VARCHAR), 姓氏(VARCHAR), 首选名称(VARCHAR) 表的合著者: ID(整数) author1ID(整数), author2ID(整数), 论文ID(整数)(此链接引用的合著论文的ID) 我想添加外键约束,以便“合作作者”中的author1ID和author2ID引用Author中的ID。我将表格定义为:Mysql 一个简单的外键问题,mysql,foreign-keys,innodb,mysql-error-1005,Mysql,Foreign Keys,Innodb,Mysql Error 1005,我有两张桌子: 表作者: ID(整数), 作者姓名(VARCHAR), 名字(VARCHAR), 姓氏(VARCHAR), 首选名称(VARCHAR) 表的合著者: ID(整数) author1ID(整数), author2ID(整数), 论文ID(整数)(此链接引用的合著论文的ID) 我想添加外键约束,以便“合作作者”中的author1ID和author2ID引用Author中的ID。我将表格定义为: CREATE TABLE Author(ID INT, author_name VARCHA
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,但随后出现错误1005无法创建表。来源:
为了在两个MySQL表之间建立外键关系,必须满足三个条件:
重要提示:对于非InnoDB表,将忽略外键子句。能否尝试“ENGINE=InnoDB” 外键约束/键约束仅适用于InnoDB表:)
--干杯首先:您需要将所有涉及外键的表定义为InnoDB。MyISAM根本不支持外键 您这里的问题(错误1005)有点混乱。如果执行
更改表
,则表示其中一个外键字段中有一个值在另一个表中没有引用
创建表时,请确保先创建“父”表,然后创建第二个和第三个表。将ID作为Authod表中的主键。感谢您的快速响应。我的问题是,我没有在外键中为我想要的列编制索引。