mysql # 1005 errno 150 - PullRequest
       10

mysql # 1005 errno 150

0 голосов
/ 03 марта 2019

Я создаю код mysql с phpmyadmin для школьного проекта и получаю сообщение об ошибке "# 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)
);

1 Ответ

0 голосов
/ 03 марта 2019

Это потому, что первичный ключ в PLAYER является составным, поэтому указывающий на него внешний ключ также должен быть составным.

Моя версия GOAL - обратите внимание на добавление 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)
); 

и аналогично для КАРТЫ и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...