2017-11-29 36 views
0

基本的に私は結合テーブルの作成に問題があり、修正方法がわかりません。最初にcInfoを作成してから、mInfoを作成してからeInfoを作成しましたが、cRentedを作成しようとするとエラーが発生しました:Error Code:1215。外部キー制約を追加できません。どんな助け?以下でMYSQL:エラーコード:1215.外部キー制約を追加できません

CREATE TABLE cInfo (
cid int(4) DEFAULT '0', 
fname varchar(20) NOT NULL, 
sname varchar(20) NOT NULL, 
age int(4) DEFAULT '0', 
gender enum('M', 'F') NOT NULL DEFAULT 'M', 
telno int(10) DEFAULT '0', 
email varchar(20) NOT NULL, 
addr varchar(50) NOT NULL, 
cowed int(4) NOT NULL DEFAULT '0', 
PRIMARY KEY (cid, cowed) 
); 

INSERT INTO cInfo VALUES(1,'Smith', 'John', 20, 'M', 0891234567, 
'[email protected]', '1 Bishopstown Road, Cork', 10); 


CREATE TABLE mInfo (
mid INT NOT NULL, 
title varchar(100) NOT NULL, 
director varchar(100) NOT NULL, 
relyear int(4) NOT NULL, 
genre enum('Thriller','Horror','Documentary','Comedy','Drama') NOT NULL 
DEFAULT ‘Drama’, 
PRIMARY KEY (mid) 
); 

INSERT INTO mInfo VALUES(1,'Justice League', 'Zack Snyder', 2017, 'Comedy'); 


CREATE TABLE eInfo (
eid int(4) DEFAULT '0', 
ppsn varchar(10) NOT NULL, 
fname varchar(20) NOT NULL, 
sname varchar(20) NOT NULL, 
gender enum(‘M’, ‘F’) NOT NULL DEFAULT ‘M’, 
telno int(10) DEFAULT '0', 
email varchar(100) NOT NULL, 
addr varchar(200) NOT NULL, 
mid INT NOT NULL, 
PRIMARY KEY (mid), 

CONSTRAINT eInfo_ref1 FOREIGN KEY (mid) REFERENCES mInfo (mid) 
); 

INSERT INTO eInfo VALUES(1, '1234567A', 'Moyes', 'Richard', 'M', 0871234567, 
'[email protected]', '1 CIT Road, Cork', 1); 


CREATE TABLE cRented (
cid int(4) DEFAULT '0', 
mid INT NOT NULL, 
dor Date NOT NULL, 
cowed int(4) NOT NULL DEFAULT '0', 
PRIMARY KEY (cid, mid, cowed), 

CONSTRAINT cRented_ref1 FOREIGN KEY (cid) REFERENCES cInfo (cid), 
CONSTRAINT cRented_ref2 FOREIGN KEY (mid) REFERENCES mInfo (mid), 
CONSTRAINT cRented_ref3 FOREIGN KEY (cowed) REFERENCES cInfo (cowed) 
); 

INSERT INTO cRented VALUES(1, 1, 2017-11-23, 10); 
+2

FKはPKと一致する必要があります。 cInfoにはPK(cid、cowed)がありますが、FKはcidのみを参照します。 – jarlh

+0

また、同じテーブルの主キーである外部キーを持つべきではありません。 'eInfo'では' mid 'ではなく 'eid'を主キーにするべきです。 @ObsidianAge、 –

+0

を実行できます。 (しかしあまり一般的ではありません) – jarlh

答えて

0

CONSTRAINT cRented_ref1 FOREIGN KEY (cid) REFERENCES cInfo (cid), 
CONSTRAINT cRented_ref2 FOREIGN KEY (mid) REFERENCES mInfo (mid), 
CONSTRAINT cRented_ref3 FOREIGN KEY (cowed) REFERENCES cInfo (cowed) 

は外国複合キーcRented_ref1の賛成でCONSTRAINT cRented_ref3を削除します。

CONSTRAINT cRented_ref1 FOREIGN KEY (cid, cowed) REFERENCES cInfo (cid, cowed), 
CONSTRAINT cRented_ref2 FOREIGN KEY (mid) REFERENCES mInfo (mid) 

cRented_ref1が上に複合主キーと一致していること方法ここで はコードがありますcInfo。 EINFOとMINFO内のデータ間の関係1:

表EINFOはおそらく同じ列は1を意味し、主キーと外部キー制約を作るけれども、この場合は問題ではありません。

関連する問題