我有这张桌子:
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
。我在这里缺少什么?
答案 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列id
和st
组成)。
外国人应该引用具有唯一约束的PK,或者在你的情况下添加两列。 尝试:
FOREIGN KEY (id,var_str) REFERENCES a(id, st)