2013-09-26 76 views
1

我一直在閱讀有關StackOverflow和各種論壇關於這個問題,但我似乎無法弄清楚。當試圖運行下面的「CREATE TABLE Class」和「CREATE TABLE Enroll」命令時,我得到「ERROR 1005:Can not create table university.class(errno:150)」。我使用InnoDB作爲我的存儲引擎。前兩個「CREATE」語句正常工作。MYSQL外鍵錯誤:150無法創建表

我需要做些什麼改變才能使「CREATE TABLE Class和CREATE TABLE Enroll」部分起作用?

CREATE TABLE Student (
    stuId VARCHAR(6), 
    lastName VARCHAR(20) NOT NULL, 
    firstName VARCHAR(20) NOT NULL, 
    major VARCHAR(10), 
    credits FLOAT(3) DEFAULT 0, 
    CONSTRAINT Student_stuId_pk PRIMARY KEY (stuId), 
    CONSTRAINT Student_credits_cc CHECK ((credits>=0) AND (credits < 150))); 

CREATE TABLE Faculty (
    facId VARCHAR(6), 
    name VARCHAR(20) NOT NULL, 
    department VARCHAR(20), 
    rank VARCHAR(10), 
    CONSTRAINT Faculty_facId_pk PRIMARY KEY (facId)); 

CREATE TABLE Class (
    classNumber VARCHAR(8), 
    facId VARCHAR(6) NOT NULL, 
    schedule VARCHAR(8), 
    room VARCHAR(6), 
    CONSTRAINT Class_classNumber_pk PRIMARY KEY (classNumber), 
    CONSTRAINT Class_facId_fk FOREIGN KEY (facId) REFERENCES Faculty 
     (facId) ON DELETE SET NULL, 
    CONSTRAINT Class_schedule_room_uk UNIQUE (schedule, room)); 

CREATE TABLE Enroll (
    stuId VARCHAR(6), 
    classNumber VARCHAR(8), 
    grade VARCHAR(2), 
    CONSTRAINT Enroll_classNumber_stuId_pk PRIMARY KEY 
     (classNumber, stuId), 
    CONSTRAINT Enroll_classNumber_fk FOREIGN KEY (classNumber) 
     REFERENCES Class (classNumber) ON DELETE CASCADE, 
CONSTRAINT Enroll_stuId_fk FOREIGN KEY (stuId) REFERENCES Student 
(stuId)ON DELETE CASCADE); 

下面是完整的命令和錯誤:

mysql> CREATE TABLE Class (classNumber VARCHAR(8), facId VARCHAR(6) NOT NULL, schedule VARCHAR(8), room VARCHAR(6), CONSTRAINT Class_classNumber_pk PRIMARY KEY (classNumber), CONSTRAINT Class_facId_fk FOREIGN KEY (facId) REFERENCES Faculty (facId) ON DELETE SET NULL, CONSTRAINT Class_schedule_room_uk UNIQUE (schedule, room)); 
ERROR 1005 (HY000): Can't create table 'university.Class' (errno: 150) 
+1

這可能是因爲facId表「類」設置爲NOT NULL,但表「教師」 facId是不是? – andrewb

+0

我試着在Faculty表中添加「NOT NULL」,並且在其他兩個命令中沒有區別。感謝您的想法,但不幸的是它並沒有解決我的問題。 – tbenz9

+1

可能的重複:[Mysql創建表與多個外鍵刪除設置null](http://stackoverflow.com/questions/15880070/mysql-create-table-with-multiple-foreign-key-on-delete-set- null) – aaron

回答

2

刪除在facId的界定及NOT NULL

+0

謝謝,我很尷尬地看到這是一個如此簡單的修復。我感謝您的幫助。 – tbenz9

0

難道你創建的表系第一。 檢查此鏈接

inno db error

如果你得到1005錯誤150表示,這意味着

一個外鍵約束被不正確形成

0

這是發生是由於外國科耶錯誤。要獲得有關外鍵錯誤的更多詳細信息,請運行SHOW ENGINE INNODB STATUS \ G並查看「最新的外鍵錯誤」部分。

我認爲它會告訴外鍵是無效的,因爲Faculty.facid上沒有唯一索引或主鍵索引。

相關問題