2013-09-26 5 views
1

Я читал об StackOverflow и различных форумах об этой проблеме, но я не могу понять, как это понять. При попытке выполнить команды «CREATE TABLE Class» и «CREATE TABLE Enroll» ниже я получаю «ERROR 1005: не удается создать таблицу university.class (errno: 150)». Я использую InnoDB в качестве механизма хранения. Первые два оператора CREATE работают нормально.MYSQL Foreign Key errno: 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

Я попытался добавить «NOT NULL» к facId в таблице Faculty, и это не имело никакого значения в двух других командах. Спасибо за эту идею, но, к сожалению, она не решила мою проблему. – tbenz9

+1

Возможный дубликат: [Mysql create table with multiple foreign key on delete set null] (http://stackoverflow.com/questions/15880070/mysql-create-table-with-multiple-foreign-key-on-delete-set- null) – aaron

ответ

2

Удалить в Defination из facId NOT NULL

+0

Спасибо, я смущен, увидев, что это было простое решение. Я ценю вашу помощь. – tbenz9

0

вы создали факультет Таблица первый ли. проверить эту ссылку

inno db error

, который говорит, что если вы получаете 1005 с ошибкой 150 это означает

ограничение внешнего ключа не был правильно сформирован

0

Это происходит из-за чужой ошибки KEYE. Чтобы получить более подробную информацию об ошибке внешнего ключа, запустите SHOW ENGINE INNODB STATUS \ G и посмотрите раздел «ПОСЛЕДНИЙ ИНОСТРАННЫЙ КЛЮЧ».

Я думаю, что это говорит о том, что внешний ключ недействителен, потому что на Faculty.facid нет индекса индекса или первичного ключа.

Смежные вопросы