2013-05-15 28 views
2

我不知道SQL爲什麼不能用於Class表。我知道這個問題與外鍵關係有關,如果我刪除表格將被創建。我的語法有什麼問題嗎?用外鍵創建表的SQL語句不正確?

我收到的錯誤是:錯誤代碼:1005無法創建表 'university.class'(錯誤: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)); 

DROP TABLE Class; 

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)); 
+0

表中的教職員工是否實際創建了?我不使用mySql,但其他數據庫引擎不允許使用可空的主鍵列。即使mySql允許它,這似乎是一個非常糟糕的主意。 –

+0

@DanBracuk - 主鍵不能爲空。 –

+0

是的教師表創建。 – LF4

回答

1

你有ON DELETE SET NULLClass.facID不允許空值,因此這將是不可能的。

This works並刪除孤兒中離開列NULL的父記錄。

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) 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)); 


INSERT INTO Faculty 
VALUES('1','Foo','foo','foo'); 


INSERT INTO Class 
VALUES('1','1','foo','foo'); 

DELETE FROM Faculty; 
+0

這是有道理的,我認爲它爲父母設置NULL。感謝您解釋這一點。 – LF4

1

外鍵不應該是NULL

CREATE TABLE類(

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) , 

CONSTRAINT Class_schedule_room_uk UNIQUE (schedule, room))