尽管有正确的密钥,但获取“无法添加外键约束”

时间:2017-03-26 22:17:06

标签: mysql

我有这张桌子:

CREATE TABLE `a` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `location` varchar(255) NOT NULL,
  `st` varchar(255) NOT NULL,
  PRIMARY KEY (`id`,`st`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我正在尝试添加第二个表,其中有一个外键引用上面的st

CREATE TABLE b (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(255) NOT NULL,
  desc varchar(999) NOT NULL,
  var_str varchar(255) NOT NULL,
  PRIMARY KEY (id),
  FOREIGN KEY (var_str) REFERENCES a(st)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

每次运行上面的查询时,我都会得到:Cannot add foreign key constraint。我在这里缺少什么?

3 个答案:

答案 0 :(得分:0)

外键属性必须引用主键或具有UNIQUE约束的列,您应该将其添加到st列:

`st` varchar(255) NOT NULL UNIQUE,

答案 1 :(得分:0)

如果我没有弄错,为了声明FK约束,引用的列必须是主键或对其具有UNIQUE约束。因此,您可以更改表a的定义以添加UNIQUE约束:

CREATE TABLE `a` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `location` varchar(255) NOT NULL,
  `st` varchar(255) NOT NULL UNIQUE,
  PRIMARY KEY (`id`,`st`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

答案 2 :(得分:0)

您的主键是一个组合(由2列idst组成)。

外国人应该引用具有唯一约束的PK,或者在你的情况下添加两列。 尝试:

FOREIGN KEY (id,var_str) REFERENCES a(id, st)