2017-09-06 64 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表是這樣的:

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

這樣你就可以使用這些兩列像國外鍵在您的Enrolment表中,否則在創建此表時會出錯。

如果你想刪除表Course你必須先刪除Enrolment,然後再添加外鍵。

+0

它的工作!買我不明白爲什麼。添加這兩個索引是做什麼的?當你參考一個不是主鍵的FK時,我認爲你只需要索引? – Bartholomas

相關問題