我是SQL编程的新手,我在名为SP的表上设置了约束,因此遇到了问题。我正在使用MySQLWorkbench并收到此错误:
错误代码:1239。'FK_SP_sNo'的外键定义不正确:键引用和表引用不匹配
我看不出有什么问题。有人可以帮忙解释一下什么问题吗?
最诚挚的问候
CREATE TABLE S
(
sNo CHAR(5),
sName CHAR(20),
status NUMERIC(5),
city CHAR(15),
PRIMARY KEY (sNo)
);
CREATE TABLE P
(
pNo CHAR(6),
pName CHAR(20),
color CHAR(20),
weight NUMERIC(10),
city CHAR(15),
PRIMARY KEY (pNo)
);
CREATE TABLE SP
(
sNo CHAR(5),
pNo CHAR(6),
qty SMALLINT,
PRIMARY KEY (sNo, pNo),
CONSTRAINT FK_SP_sNo FOREIGN KEY (sNo) REFERENCES S,
CONSTRAINT FK_SP_pNo FOREIGN KEY (pNo) REFERENCES P
);
答案 0 :(得分:1)
您需要引用表的列名。
CREATE TABLE SP
(
sNo CHAR(5),
pNo CHAR(6),
qty SMALLINT, PRIMARY KEY (sNo, pNo),
CONSTRAINT FK_SP_sNo FOREIGN KEY (sNo) REFERENCES S(sNo),
CONSTRAINT FK_SP_pNo FOREIGN KEY (pNo) REFERENCES P(sNo)
);
答案 1 :(得分:1)
我不知道在MySQL中是否相同,但是在Microsoft SQL Server中,我将定义FK_SP_sNo外键,如下所示:
CONSTRAINT FK_SP_sNo FOREIGN KEY (sNo) REFERENCES S(sNo)
此处的区别在于REFERENCES子句的形式为:
CONSTRAINT ConstraintName FOREIGN KEY (LocalField) REFERENCES RemoteTable(RemoteField)