首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >mysql #1005错误号150

mysql #1005错误号150
EN

Stack Overflow用户
提问于 2019-03-04 00:36:34
回答 1查看 31关注 0票数 0

我正在使用phpmyadmin为一个学校项目创建一些mysql代码,并收到错误消息"#1005 -无法创建表world_cupgoal(错误号: 150“外键约束的格式不正确”)(详细信息…)“。

我不明白为什么我会得到这个错误。如果我删除了GOAL实体,它仍然会给出错误,但对于CARD实体。事实上,它不像我创建的最后4个实体。我想这跟外键有关。

我尝试过的:确保所有的FK和引用的PK都是相同的数据类型。它们完全匹配。我想不出还有什么可以尝试的。

这是到期的明天,所以任何帮助,将非常感谢!谢谢!

代码如下:

DROP DATABASE IF EXISTS WORLD_CUP;
CREATE DATABASE WORLD_CUP;
USE WORLD_CUP;

CREATE TABLE TEAM( 
Cid varchar(2) NOT NULL, 
Continent varchar(20), 
Confederation varchar(20) NOT NULL, 
Population int, 
CName varchar(20) NOT NULL, 
PRIMARY KEY(Cid),
UNIQUE(CName)
); 

 CREATE TABLE PLAYER( 
 PCid varchar(2) NOT NULL, 
 Pno int NOT NULL, 
 Position varchar(20) NOT NULL, 
 Pfname varchar(20) NOT NULL, 
 Plname varchar(20) NOT NULL, 
 Weight int, 
 Height int, 
 Club varchar(20), 
BDayMonth int, 
BDayDay int, 
BDayYear int, 
PJName varchar(22) NOT NULL, 
PRIMARY KEY(PCid, PNo),
FOREIGN KEY (PCid) REFERENCES TEAM(Cid)
); 

CREATE TABLE GAME( 
Gid varchar(2) NOT NULL, 
Score1 int, 
Score2 int, 
Stadium varchar(20), 
Team1Cid varchar(20) NOT NULL, 
Team2Cid varchar(20) NOT NULL, 
GMonth int, 
GDay int, 
GYear int, 
GType char(1) NOT NULL, 
KOGSubtype char(1),
PRIMARY KEY(Gid, Team1Cid, Team2Cid),
FOREIGN KEY(Team1Cid) REFERENCES TEAM(Cid),
FOREIGN KEY(Team2Cid) REFERENCES TEAM(Cid)
); 

CREATE TABLE STADIUM( 
Sid varchar(2) NOT NULL, 
Sname varchar(20) NOT NULL, 
Capacity int, 
City varchar(20), 
PRIMARY KEY(Sid)
); 

CREATE TABLE GOAL( 
GPno int NOT NULL, 
GMinute varchar(6) NOT NULL, 
GoalType char NOT NULL, 
GGid varchar(2) NOT NULL, 
PRIMARY KEY(GPno, GGid, GMinute) ,
FOREIGN KEY (GPno) REFERENCES PLAYER(Pno),
FOREIGN KEY (GGid) REFERENCES GAME(Gid)
); 

CREATE TABLE CARD( 
CPno int NOT NULL, 
CMinute varchar(6) NOT NULL, 
Color char(1) NOT NULL, 
CGid varchar(2) NOT NULL, 
PRIMARY KEY(CPno, CGid, CMinute) ,
FOREIGN KEY(CPno) REFERENCES PLAYER(Pno),
FOREIGN KEY(CGid) REFERENCES GAME(Gid)
); 

CREATE TABLE SUBSTITUTE( 
PInNo int NOT NULL,
POutNo int NOT NULL, 
SMinute varchar(6) NOT NULL, 
SGid varchar(2) NOT NULL,
SCid varchar(2) NOT NULL,
PRIMARY KEY(PInNo, POutNo, SMinute, SGid, SCid),
FOREIGN KEY (PInNo) References PLAYER(Pno),
 FOREIGN KEY (POutNo) References PLAYER(Pno),
 FOREIGN KEY (SGid) References GAME(Gid),
 FOREIGN KEY (SCid) References TEAM(Cid)
);

CREATE TABLE STARTINGLINEUP( 
SPno int NOT NULL,
PCid varchar(2) NOT NULL,
PGid varchar(2) NOT NULL,
PRIMARY KEY(SPno, PCid, PGid),
FOREIGN KEY (SPno) REFERENCES PLAYER(Pno),
FOREIGN KEY(PCid) REFERENCES TEAM(Cid),
FOREIGN KEY (PGid) REFERENCES GAME(Gid)
);
EN

回答 1

Stack Overflow用户

发布于 2019-03-04 02:41:54

这是因为PLAYER上的主键是复合的,所以指向它的外键也必须是复合的。

我的GOAL - note版本添加了GPCid并将其包含在外键中:

CREATE TABLE GOAL( 
GPCid varchar(2) not null,
GPno int NOT NULL, 
GMinute varchar(6) NOT NULL, 
GoalType char NOT NULL, 
GGid varchar(2) NOT NULL, 
PRIMARY KEY(GPno, GGid, GMinute) ,
FOREIGN KEY (GPCid,GPno) REFERENCES PLAYER(PCid,Pno),
FOREIGN KEY (GGid) REFERENCES GAME(Gid)
); 

对于卡片等也是类似的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54971118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档