【发布时间】:2013-07-03 08:04:56
【问题描述】:
我想知道为什么我不能添加这个外键。这是我的架构
CREATE TABLE members(
member_id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
num_1 int,
num_2 int,
password VARCHAR(50) NOT NULL,
PRIMARY KEY (member_id)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE contacts(
contact_id INT NOT NULL AUTO_INCREMENT,
s1 int,
phone_number VARCHAR(10) NOT NULL,
s2 int,
s3 int,
PRIMARY KEY (contact_id),
FOREIGN KEY (s1) REFERENCES members(num_1) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (s2) REFERENCES members(num_2) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (s3) REFERENCES members(member_id) ON DELETE CASCADE ON UPDATE CASCADE
)ENGINE=InnoDB DEFAULT CHARSET=utf8
我在 mysql 终端上收到此错误
ERROR 1215 (HY000): Cannot add foreign key constraint
我的架构有问题吗?
【问题讨论】:
-
您可能在
num_1和num_2上没有索引。这可能是原因 -
通常外键在引用表中需要一个主键
-
@JanneMatikainen 我认为唯一键
-
唯一键也可以使用
-
注意: 在某些 RDBMS 中,例如 SQL Server,您可以引用具有唯一索引(非键)的列(请参阅can we have a foreign key which is not a primary key in any other table?),但这不是-标准行为。
标签: mysql