无法在MySQL中创建外键

时间:2017-03-18 14:16:27

标签: mysql sql foreign-keys

这是一个基本主题,但我无法找到解决方案: 我有一个$&表和一个test1表:

test2

所以,我希望test1.col1成为test2.id的外键。

可是:

  • 当test2完全为空时,我可以将值插入test1(test1.col1)。
  • 如果我运行CREATE TABLE test2 ( id int NOT NULL, col1 int NOT NULL, col2 int, PRIMARY KEY (id) ); CREATE TABLE test1 ( id int NOT NULL, col1 int NOT NULL, col2 int, PRIMARY KEY (id), FOREIGN KEY (col1) REFERENCES test2(id) ); ,我会看到:

    SHOW CREATE TABLE 'test1'

    它显示一个简单的密钥(不是外来的),没有任何关于引用列的信息。

  • 在TABLE_CONSTRAINTS表中,没有FOREIGN KEY约束类型的行。

为什么这不起作用?

我的MySQL版本:5.7.14

1 个答案:

答案 0 :(得分:2)

由于某种原因,表CREATE TABLE test2 ( id int NOT NULL, col1 int NOT NULL, col2 int, PRIMARY KEY (id) ) engine=innoDB;引擎设置为MyISAM。虽然根据MySQL参考。 InnoDB被定义为默认存储引擎,这是MySQL 5.5的默认存储引擎 您没有外键的原因是MyISAM不支持外键。 尝试将表格转换为InnoDB。

您可以指定创建表时要使用的引擎

CREATE TABLE test1 ( id int NOT NULL, col1 int NOT NULL, col2 int, PRIMARY KEY (id), FOREIGN KEY (col1) REFERENCES test2(id) ) engine=innoDB;

alter table test2 engine=InnoDB;

或者通过以下方式更改现有表格:

alter table test1 engine=InnoDB;

var lowestTide=res.extremes.filter(tide => { return tide.type=="Low"; }).sort(function(a,b) {return (a.height > b.height) ? -1 : ((b.height > a.height) ? 1 : 0);} )[0] var highestTide=res.extremes.filter(tide => { return tide.type=="High"; }).sort(function(a,b) {return (a.height > b.height) ? -1 : ((b.height > a.height) ? 1 : 0);} )[0]

然后添加缺少的外键