2017-01-23 28 views
0

実装しようとしているデータベースについて簡単に質問しています。私は私のようないくつかの他の質問に言及しましたが、私の特定の質問にはあまり答えません。エラーコード1215、外部キー制約を追加できません

私は比較的新しいSQLを使用しています。私はそれまでに1つのクラスを取りました。ここでリフレッシャーの一種。言ってエラーのため

私はMySQLを使用してこのデータベースを構築しようとすると、私は私のテーブルのいずれかを作成することはできませんよ「エラーコード1215は、外部キー制約を追加することはできません」

私はちょうど何かをしないのです明らかですか?以下は

は私のSQLです:

create database emp; 
use emp; 

select database(); 

create table employee 
(Fname varchar (15), 
Minit varchar (1), 
Lname varchar (15), 
Ssn int (9) not null, 
Bdate varchar (10), 
Address varchar (40), 
Sex varchar (1), 
Salary varchar (10), 
Super_ssn varchar (9), 
Dno int (1), 

primary key(Ssn), 

foreign key(Super_ssn) references employee(Ssn), 
foreign key(Dno) references department(Dnumber) 


) 

Engine=INNODB; 

create table department 
(Dname varchar (15), 
Dnumber int (1) not null, 
Mgr_ssn int (9), 
Mgr_start_date varchar (15), 

primary key(Dnumber), 

foreign key(Mgr_ssn) references employee (Ssn) 


) 

Engine=INNODB; 


create table dept_locations 
(Dnumber int (1) not null, 
Dlocation varchar (15) not null, 

primary key(Dnumber, Dlocation), 
foreign key(Dnumber) references department(Dnumber) 

) 

Engine=INNODB; 

create table project 
(Pname varchar (15), 
Pnumber int (3) not null, 
Plocation varchar (15), 
Dnum int (1), 

primary key(Pnumber), 
foreign key(Dnum) references department(Dnumber) 

) 

Engine=INNODB; 

create table works_on 
(Essn int (9) not null, 
    Pno int (3) not null, 
    hours float (4), 

    primary key(Essn, Pno), 
    foreign key (Essn) references employee(Ssn), 
    foreign key(Pno) references project (Pnumber) 
) 

    Engine=INNODB; 

    create table dependent 

    (Essn int (9) not null, 
    Dependent_name varchar (15) not null, 
    Sex varchar (1), 
    Bdate varchar (10), 
    Relationship varchar (10), 

    primary key(Essn, Dependent_Name), 
    foreign key (Essn) references employee(Ssn) 

    ) 

    Engine=INNODB; 
+1

作成するテーブルステートメントは、実際には失敗していますか? –

+0

ひとつひとつが、私が最初に始めたのは従業員です。 – Gary

答えて

2

あなたは他のテーブルを作成する前に、別のテーブルを参照する外部キーを作成することはできません。したがって、departmentテーブルを作成する前に、employeedepartmentを参照する外部キーを設定することはできません。しかしdepartmentテーブルにはemployeeを参照する外部キーがあるため、逆の順序で作成することはできません。

テーブルを作成するときは、作成していないテーブルを参照する外部キーを除外し、後でALTER TABLEを追加します。

create table employee 
(Fname varchar (15), 
Minit varchar (1), 
Lname varchar (15), 
Ssn int (9) not null, 
Bdate varchar (10), 
Address varchar (40), 
Sex varchar (1), 
Salary varchar (10), 
Super_ssn varchar (9), 
Dno int (1), 

primary key(Ssn), 
foreign key(Super_ssn) references employee(Ssn), 
); 

create table department 
(Dname varchar (15), 
Dnumber int (1) not null, 
Mgr_ssn int (9), 
Mgr_start_date varchar (15), 

primary key(Dnumber), 
foreign key(Mgr_ssn) references employee (Ssn) 
); 

alter table employee add constraint foreign key (Dno) references department(Dnumber); 
+0

ああ。これは私が起こっていたと信じているものです。お返事ありがとうございました。あなたが話しているalter table機能を使用するにはどうすればよいですか? – Gary

+0

それは答えです。 – Barmar

+0

私は、どのような構文を使用して、alter tableで外部キーを追加するのかを意味しました – Gary

関連する問題