2013-09-11 3 views
0

У меня есть этот код:Ошибка 1005 (HY000) MySQL Ошибка

CREATE DATABASE IF NOT EXISTS courses; 

USE 'courses' 

CREATE TABLE IF NOT EXISTS teachers(
    id INT(10) UNSIGNED PRIMARY KEY NOT NULL AUTO_INCREMENT, 
    name VARCHAR(50) NOT NULL, 
    addr VARCHAR(255) NOT NULL, 
    phone INT NOT NULL 
)ENGINE=InnoDB DEFAULT CHARSET=utf8; 

CREATE TABLE IF NOT EXISTS lessons(
    id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, 
    room TINYINT NOT NULL, 
    length INT NOT NULL, 
    lesson_date DATETIME NOT NULL, 
    teacher INT NOT NULL, 
    course INT NOT NULL, 
    FOREIGN KEY(teacher) REFERENCES teachers(id), 
    FOREIGN KEY(course) REFERENCES courses(id) 
)ENGINE=InnoDB DEFAULT CHARSET=utf8; 

CREATE TABLE IF NOT EXISTS courses(
     id INT PRIMARY KEY AUTO_INCREMENT NOT NULL, 
     title VARCHAR(200) NOT NULL, 
     length INT NOT NULL, 
     description TEXT DEFAULT '', 
     previous INT NOT NULL, 
    FOREIGN KEY(previous) REFERENCES courses(id) 
)ENGINE=InnoDB DEFAULT CHARSET=utf8; 

После выполнения этого кода, у меня есть сообщение об ошибке: Error 1005 (HY000) Невозможно создать таблицу 'courses.lessons' (ERRNO : 150) Что я сделал не так?

+0

FOREIGN KEY (курс) Литому курсы (ID) - ссылка на таблицу, которая не существует yet.USE \ '\' курсы с обратными кавычками. – Mihai

+0

Таблица «курсы» еще не создана, и она указана в разделе «FOREIGN KEY» таблицы уроков. Попробуйте поменять порядок последних двух таблиц. – Hope4You

+0

У вас не может быть значение по умолчанию 'TEXT' – Prix

ответ

0

У вас есть две проблемы. Первое тривиально: вы не можете создать внешний ключ на lessons.course, потому что таблица еще не существует, поэтому создание таблицы не выполняется. Чтобы исправить это, переместите create table для уроков после курсов.

Вторая проблема заключается в том, что столбец lessons.teacher не имеет того же типа, что и teacher.id. Внешний ключ может быть создан только тогда, когда столбцы имеют один и тот же тип, и вы определили teacher.id как INT(10) UNSIGNED, а lessons.teacher - это всего лишь INT (подпись и длина 11 подразумеваемых). Измените определение lessons.teacher колонки к тому же типу:

teacher INT(10) UNSIGNED NOT NULL, 
Смежные вопросы