2017-09-06 22 views
0

テーブル登録を作成できない理由はわかりません。私は学生、uniadminとコースを参照する必要があり、私はそれらを登録の上に作成しました。MySQL - #1005 - テーブル 'university.Enrolment'(errno:150)を作成できません(詳細...)

これらはすべて同じ名前、属性タイプ、および長さです。ここで間違っているものはわかりません。それは私が外来のキー参照を使用するテーブルのすべてに起こっている...それは私が推測するそれらと何かする必要があります。私が受け取る

エラー: SQLクエリ:

CREATE TABLE Enrolment(

EnrolmentIDCHAR(3) NOT NULL , 
StudentIDCHAR(3) NOT NULL , 
StaffIDCHAR(3) NOT NULL , 
CourseIDCHAR(7) NOT NULL , 
CampusCHAR(2) NOT NULL , 
Trimester TINYINT(1) NOT NULL , 
CONSTRAINT PK_Enrolment PRIMARY KEY (EnrolmentID) , 
CONSTRAINT FK1_Enrolment FOREIGN KEY (StudentID) REFERENCES Student(StudentID) , 
CONSTRAINT FK2_Enrolment FOREIGN KEY (StaffID) REFERENCES UniversityAdmin(StaffID) , 
CONSTRAINT FK3_Enrolment FOREIGN KEY (CourseID) REFERENCES Course(CourseID) , 
CONSTRAINT FK4_Enrolment FOREIGN KEY (Campus) REFERENCES Course(Campus) , 
CONSTRAINT FK5_Enrolment FOREIGN KEY (Trimester) REFERENCES Course(Trimester) /*constraint Check_EnrolmentCampus check (Campus in ('GC', 'BR')*/ 
); 

MySQL said: Documentation 

#1005 - Can't create table 'university.Enrolment' (errno: 150) (Details…) 

"詳細" 言う:

のInnoDBドキュメント

は[取引、行レベルのロック、および外部キー

をサポート変数|バッファプール| InnoDBのステータス]

マイコード:

DROP DATABASE IF EXISTS university; 
CREATE DATABASE IF NOT EXISTS university; 
USE university; 

drop table if exists Student; 
drop table if exists UniversityAdmin; 
drop table if exists Course; 
drop table if exists Academic; 
drop table if exists Teaches; 
drop table if exists Administers; 
drop table if exists Manages; 
drop table if exists Enrolment; 
drop table if exists Scored; 

Create table Student(
      StudentID Char(3) not null, 
      Password Varchar(20) not null, 
      FirstName Varchar(15) not null, 
      MiddleName Varchar(15), 
      LastName Varchar(15) not null, 
      DateOfBirth Date not null, 
      Sex Char(1) not null, 
      HomeAddress Varchar(60) not null, 
      PhoneNumber Varchar(10) not null, 
      constraint PK_Student primary key(StudentID) 
      /*constraint Check_StudentSex check (Sex in ('M', 'F')*/ 
      ); 

Create table UniversityAdmin(
      StaffID Char(3) not null, 
      Password Varchar(20) not null, 
      Duty Varchar(20) not null, 
      FirstName Varchar(15) not null, 
      MiddleName Varchar(15), 
      LastName Varchar(15) not null, 
      DateOfBirth Date not null, 
      Sex Char(1) not null, 
      HomeAddress Varchar(60) not null, 
      PhoneNumber Varchar(10) not null, 
      constraint PK_UniversityAdmin primary key(StaffID) 
      /*constraint Check_UniversityAdminSex check (Sex in ('M', 'F')*/ 
      ); 

Create table Course(
      CourseID Char(7) not null, 
      Campus Char(2) not null, 
      Trimester TinyInt(1) not null, 
      CourseName Varchar(50) not null, 
      Convenor Varchar(30) not null, 
      Prerequisite Char(7), 
      Year TinyInt(4) not null, 
      constraint PK_Course primary key(CourseID, Campus, Trimester) 
      /*constraint Check_CourseCampus check (Campus in ('GC', 'BR')*/ 
      ); 

Create table Academic(
      StaffID Char(3) not null, 
      Password Varchar(20) not null, 
      Position Varchar(30) not null, 
      FirstName Varchar(15) not null, 
      MiddleName Varchar(15), 
      LastName Varchar(15) not null, 
      DateOfBirth Date not null, 
      Sex Char(1) not null, 
      HomeAddress Varchar(60) not null, 
      PhoneNumber Varchar(10) not null, 
      constraint PK_Academic primary key(StaffID) 
      /*constraint Check_AcademicSex check (Sex in ('M', 'F')*/ 
      );  

Create table Enrolment(
      EnrolmentID Char(3) not null, 
      StudentID Char(3) not null, 
      StaffID Char(3) not null, 
      CourseID Char(7) not null, 
      Campus Char(2) not null, 
      Trimester TinyInt(1) not null, 
      constraint PK_Enrolment primary key (EnrolmentID), 
      constraint FK1_Enrolment foreign key (StudentID) references Student(StudentID), 
      constraint FK2_Enrolment foreign key (StaffID) references UniversityAdmin(StaffID), 
      constraint FK3_Enrolment foreign key (CourseID) references Course(CourseID), 
      constraint FK4_Enrolment foreign key (Campus) references Course(Campus), 
      constraint FK5_Enrolment foreign key (Trimester) references Course(Trimester) 
      /*constraint Check_EnrolmentCampus check (Campus in ('GC', 'BR')*/ 
      ); 
+1

エラーを投稿する –

+0

私はエラーメッセージ – Bartholomas

+0

を更新しました。詳細をクリックして、完全なエラーを投稿してください。 –

答えて

0

すでに他のテーブルを作成した場合は、このようなCourseテーブル変更することができます:あなたは外国人のようなものを2つの列を使用することができ、このよう

ALTER TABLE Course 
     ADD INDEX(Campus), 
     ADD INDEX(Trimester); 

をキーをEnrolmentテーブルに追加します。そうしないと、このテーブルの作成中にエラーが発生します。

テーブルCourseを削除する場合は、外部キーを追加した後、最初にEnrolmentを削除する必要があります。

+0

それは働いた!購入私は理由を理解していない。これらの2つのインデックスを追加するとどうなりますか?プライマリキーではないFKを参照するときに必要なのはインデックスだけだと思いましたか? – Bartholomas

関連する問題