2016-03-20 38 views
1

外部キー制約を追加しようとしていますが、失敗します。私はこれまでに何度もやっていたので、なぜそれがそれをしているのか判断できません。基本的には、スキルと従業員をSkill_Bridgeテーブルに関連付ける必要があります。私はSkill_BridgeとSkillsを関連付けることができましたが、従業員と同じことをしようとすると失敗します。データ型は同じなので、私はこれが問題だとは思わない。私もSkill_Bridgeのプライマリキーを作成しようとしましたが、それらを関連させようとしましたが、うまくいきませんでした。最初の制約は「FKey1」に失敗する制約です。これは私のコードです。どんな助けもありがとう。前もって感謝します。エラーコード1215:外部キー制約を追加できません

あなたが foregn keysにMySQLのマニュアルを参照してください、外部キーで参照することができます前に、skill_bridgeテーブルにemployeeSkillGroupkeyにインデックスを作成する必要が
create database if not exists Q3; 

use Q3; 

drop table if exists Employees; 

create table Employees( 
employeekey int not null, 
firstName varchar (100) not null, 
lastName varchar (100) not null, 
employeeSkillGroupkey int not null, 

primary key (employeekey)); 

insert into Employees values 
(1, 'Ted', 'Codd', 1), 
(2, 'Ralph' ,'Kimball', 7), 
(3, 'Joe' ,'Celko', 1), 
(4, 'James' ,'Gosling', 2), 
(5, 'Godfrey', 'Muganda', 6), 
(6, 'Margy', 'Ross', 5), 
(7, 'Peter', 'Chen', 4), 
(8, 'Terry' ,'Halpin',3), 
(9, 'Tony', 'Morgan', 2); 

drop table if exists Skills; 

create table Skills(
empSkillKey int not null, 
empSkillDescription varchar (1000) not null, 
empSkillCategory varchar (200) not null, 

primary key (empSkillkey)); 

insert into Skills values 
(1, 'SQL', 'Database'), 
(2, 'ERD', 'Database'), 
(3, 'DM', 'Database'), 
(4, 'Java', 'Programming'), 
(5, 'Pascal', 'Programming'); 

drop table if exists Skill_Bridge; 

create table Skill_Bridge(
employeeSkillGroupkey int not null, 
empSkillKey int not null 
); 

insert into Skill_Bridge values 
(1, 1), 
(2, 4), 
(3, 4), 
(3, 5), 
(4, 4), 
(4, 2), 
(5, 1), 
(5, 3), 
(6, 4), 
(6, 5), 
(6, 2), 
(7, 1), 
(7, 2), 
(7, 3), 
(7, 4); 

ALTER TABLE Employees ADD CONSTRAINT FKey1 FOREIGN KEY (employeeSkillGroupkey) 
REFERENCES Skill_Bridge (employeeSkillGroupkey) 
ON DELETE Restrict 
ON UPDATE Cascade; 

ALTER TABLE Skill_Bridge ADD CONSTRAINT ForK2 FOREIGN KEY (empSkillKey) 
REFERENCES Skills (empSkillKey) 
ON DELETE Restrict 
ON UPDATE Cascade; 

答えて

0

InnoDBは任意のインデックス列を参照するために、外部キーを許可または 列のグループです。ただし、参照先の表には、同じ順序で の最初の列として参照先の列がリストされている索引 が必要です。

また、外部キーの方向を逆にすることもできます。接続テーブルはマスタテーブルを参照する必要があります。その逆もありません。

+0

これで問題は解決しました。どうもありがとうございました! – GGes

+0

この場合、plsは回答を受け入れたものとしてマークするので、他のユーザは問題が解決されたことを知ることができます。 – Shadow

関連する問題