Ошибка MySQL # 1064 - PullRequest
       13

Ошибка MySQL # 1064

2 голосов
/ 24 марта 2012

Привет, все, что я не могу найти ошибку в этом бите создания таблицы, кажется очень простым, вот что он мне дает:

ОШИБКА 1064 в строке 3: у вас ошибка в синтаксисе SQL; проверить руководство, которое соответствует вашей версии сервера MySQL для права синтаксис для использования рядом с 'FOREIGN KEY (courses_courseDepartmentAbbv))' в строка 8

DROP TABLE IF EXISTS courses;

CREATE TABLE courses(
   courses_courseNumber INT NOT NULL AUTO_INCREMENT,
   courses_courseTitle VARCHAR(25) NOT NULL,
   courses_courseTeacher VARCHAR(30) NOT NULL,
   courses_courseCostOfBooks DECIMAL(5,2) NOT NULL,
   courses_courseDepartmentAbbv CHAR(4) NOT NULL,
   PRIMARY KEY (courses_courseNumber),
   FOREIGN KEY (courses_courseTeacher),
   FOREIGN KEY (courses_courseDepartmentAbbv)
);

DROP TABLE IF EXISTS departments;

CREATE TABLE departments(
    departments_departmentAbbv CHAR(4) NOT NULL,
    departments_departmentFullName VARCHAR(15) NOT NULL,
    PRIMARY KEY (departments_departmentAbbv),
    FOREIGN KEY (departments_departmentAbbv) REFERENCES (courses_courseDepartmentAbbv)
);

DROP TABLE IF EXISTS teachers;

CREATE TABLE teachers(
          teachers_teacherName VARCHAR(20) NOT NULL,
    teachers_teacherHomeroom SMALLINT(3) NOT NULL,
    teachers_teacherHomeroomGrade SMALLINT(1) NOT NULL,
    teachers_teacherFullTime BOOL NOT NULL,
    PRIMARY KEY (teachers_teacherName),
    FOREIGN KEY (teachers_teacherName) REFERENCES (courses_courseTeacher)
);

Ответы [ 3 ]

2 голосов
/ 24 марта 2012

Вы должны иметь ссылки после каждого внешнего ключа.Вам не хватает этого в начале настройки курсов.Вот документация

Я думаю, это больше того, что вы хотите.Ваш порядок создания был неверным.У вас были внешние ключи в неправильном месте из-за этого.Вы только настраиваете сопоставления внешнего ключа на таблицах с отношениями к PK.Вам нужно только настроить PK на других ваших столах.Пока вы создаете таблицы в правильном порядке, вы можете делать это, как показано ниже.

Итак, teachers и departments имеют первичные ключи, которые являются внешними ключами в таблице courses.teachers и departments не нужно беспокоиться о внешнем ключе.Вы оставляете это до таблицы, которая на самом деле имеет ссылку (courses)

DROP TABLE IF EXISTS teachers;

CREATE TABLE teachers(
          teachers_teacherName VARCHAR(20) NOT NULL,
    teachers_teacherHomeroom SMALLINT(3) NOT NULL,
    teachers_teacherHomeroomGrade SMALLINT(1) NOT NULL,
    teachers_teacherFullTime BOOL NOT NULL,
    PRIMARY KEY (teachers_teacherName)
    --FOREIGN KEY (teachers_teacherName) REFERENCES courses (courses_courseTeacher)
    --This is not where you set up the FK for courses
);

DROP TABLE IF EXISTS departments;

CREATE TABLE departments(
    departments_departmentAbbv CHAR(4) NOT NULL,
    departments_departmentFullName VARCHAR(15) NOT NULL,
    PRIMARY KEY (departments_departmentAbbv)
    --FOREIGN KEY (departments_departmentAbbv)  REFERENCES courses (courses_courseDepartmentAbbv)
    --This is not where you set up the FK for courses
);

CREATE TABLE courses(
   courses_courseNumber INT NOT NULL AUTO_INCREMENT,
   courses_courseTitle VARCHAR(25) NOT NULL,
   courses_courseTeacher VARCHAR(30) NOT NULL,
   courses_courseCostOfBooks DECIMAL(5,2) NOT NULL,
   courses_courseDepartmentAbbv CHAR(4) NOT NULL,
   PRIMARY KEY (courses_courseNumber),
   FOREIGN KEY (courses_courseTeacher) 
       REFERENCES teachers (teachers_teacherName)
   FOREIGN KEY (courses_courseDepartmentAbbv) 
       REFERENCES departments(departments_departmentAbbv)
);
0 голосов
/ 24 марта 2012

Вам необходимо дать предложение REFERENCES для предложений FOREIGN KEY

FOREIGN KEY (courses_courseTeacher)
FOREIGN KEY (courses_courseDepartmentAbbv)
0 голосов
/ 24 марта 2012

Определите тип двигателя, который должен быть innodb, который поддерживает ограничения FOREIGN KEY.

Следуйте синтаксису, определенному здесь

...