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

标签 mysql

我是 SQL 编程新手,在名为 SP 的表上设置的约束有问题。我正在使用 MySQLWorkbench 并收到此错误:

Error Code: 1239. Incorrect foreign key definition for 'FK_SP_sNo': Key reference and table reference don't match

我不明白这有什么问题。有人可以帮忙解释一下出了什么问题吗?

致以诚挚的问候

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

最佳答案

您需要引用表的列名称。

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

关于mysql - 我的创建表查询中的约束有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55659661/

相关文章:

php - 最后从 MySQL PHP 插入相应的记录 ID

MySQL 不等于 - 不工作

mysql - 为什么在 SQL 匹配中使用 'LIKE' 不算数?

mysql - SQL 连接第三个表

java - 为什么 Hibernate 会生成约 500 个 SQL 查询?

java - 在 Spring Boot JPA 中编辑对象值和使用 save() 时 MySQL java.sql.SQLSyntaxErrorException

mysql - 在 MySql-DB 上重新创建表结果出现 errno 150

mysql - 从 SELECT 查询中删除嵌套部分

mysql - 在Mysql中将一个存储过程结果作为参数传递给另一个存储过程

php - 带有游标的存储过程以奇怪的方式执行