我正在使用phpmyadmin为一个学校项目创建一些mysql代码,并收到错误消息"#1005 -无法创建表world_cup
。goal
(错误号: 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)
);
发布于 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)
);
对于卡片等也是类似的。
https://stackoverflow.com/questions/54971118
复制相似问题