Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 一个简单的外键问题_Mysql_Foreign Keys_Innodb_Mysql Error 1005 - Fatal编程技术网

Mysql 一个简单的外键问题

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

我有两张桌子:

表作者: ID(整数), 作者姓名(VARCHAR), 名字(VARCHAR), 姓氏(VARCHAR), 首选名称(VARCHAR)

表的合著者: ID(整数) author1ID(整数), author2ID(整数), 论文ID(整数)(此链接引用的合著论文的ID)

我想添加外键约束,以便“合作作者”中的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,但随后出现错误1005无法创建表。

来源:

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

  • 两个表都必须是InnoDB表类型

  • 外键关系中使用的字段必须编制索引

  • 外键关系中使用的字段的数据类型必须相似


  • 重要提示:对于非InnoDB表,将忽略外键子句。

    能否尝试“ENGINE=InnoDB”

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


    --干杯

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

    您这里的问题(错误1005)有点混乱。如果执行
    更改表
    ,则表示其中一个外键字段中有一个值在另一个表中没有引用


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

    将ID作为Authod表中的主键。感谢您的快速响应。我的问题是,我没有在外键中为我想要的列编制索引。