我在创建表查询中的约束有什么问题?

时间:2019-04-12 21:29:02

标签: mysql

我是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 
);

2 个答案:

答案 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)