我一直在閱讀有關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)
這可能是因爲facId表「類」設置爲NOT NULL,但表「教師」 facId是不是? – andrewb
我試着在Faculty表中添加「NOT NULL」,並且在其他兩個命令中沒有區別。感謝您的想法,但不幸的是它並沒有解決我的問題。 – tbenz9
可能的重複:[Mysql創建表與多個外鍵刪除設置null](http://stackoverflow.com/questions/15880070/mysql-create-table-with-multiple-foreign-key-on-delete-set- null) – aaron