2013-09-26 69 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上没有唯一索引或主键索引。

相关问题