我有两张表:
表作者: ID (整数)、author_name (VARCHAR)、first_name (VARCHAR)、last_name (VARCHAR)、preferred_name (VARCHAR)。
表CoAuthored: ID (整数) author1ID (整数),author2ID (整数),paper_ID (整数)(该链接引用的合著论文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,但随后得到错误1005can‘t create table。
发布于 2010-10-26 04:51:50
来自:https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-6035435.html
为了在两个MySQL表之间建立外键关系,必须满足三个条件:
要点:对于非InnoDB表,忽略FOREIGN KEY子句。
发布于 2010-10-26 04:52:21
你能试试“ENGINE=InnoDB”吗?
外键约束/键约束仅适用于InnoDB表:)
--干杯
发布于 2010-10-26 04:53:02
首先:您需要将所有与外键相关的表定义为InnoDB。MyISAM根本不支持外键。
这里的问题(错误1005)有点令人困惑。如果执行ALTER TABLE,则意味着其中一个外键字段中存在一个值,而该值在另一个表中没有引用。
在创建表时,请确保先创建“父”表,然后创建第二个和第三个表。
https://stackoverflow.com/questions/4018693
复制相似问题