2013-03-14 3 views
1

Its между так давно я сделал SQL, когда я пытаюсь вставить этот код в базу данных PhpMyAdmin это обыкновение создавать таблицу я получаю сообщение об ошибке:не могу понять синтаксис SQL для этого кода

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT NULL PRIMARY KEY, WORKER CHAR(30), CONSTRAINT WORKER_FK FOREIGN KEY(WORKE' at line 2 

это код для таблицы SQL:

CREATE TABLE REPORT(
REPORT_ID NOT NULL PRIMARY KEY, 
    WORKER CHAR(30) CONSTRAINT WORKER_FK FOREIGN KEY(WORKER) REFERENCES WORKER(WORKER_ID) 
    ON UPDATE CASCADE 
    ON DELETE SET NULL, 
    CLIENT CHAR (30) CONSTRAINT CLIENT_FK FOREIGN KEY(client) REFERENCES CLIENT(CLIENT_ID) 
    ON UPDATE CASCADE 
    ON DELETE SET NULL, 
START_DATE DATE CONSTRAINT STARTDATE_FK FOREIGN KEY(JOB) REFERENCES JOB(START_DATE) 
    ON UPDATE CASCADE 
    ON DELETE SET NULL, 
    END_DATE DATE CONSTRAINT ENDDATE_FK FOREIGN KEY(JOB) REFERENCES JOB(END_DATE) 
    ON UPDATE CASCADE 
    ON DELETE SET NULL, 
    COMMENT CHAR(30) 
)engine innoDB; 

может кто-нибудь помочь мне, пожалуйста

+0

Do КЛИЕНТ, РАБОТНИК, и существуют таблицы JOB? имеют ли они ссылочные столбцы? –

+0

Да, таблицы действительно существуют. я снова посмотрю, видел ли я просто испортил имена или что-то там, где. THanks – Sean

+0

спасибо a_horse_with_no_name Я был просто смущен благодарю за помощь – Sean

ответ

2

Действительное сообщение об ошибке исходит из того, что REPORT_ID не имеет тип данных.

REPORT_ID NOT NULL PRIMARY KEY, 

должен быть

REPORT_ID INTEGER NOT NULL PRIMARY KEY, 

Но у вас есть гораздо больше проблем. «Встроенные» внешние ключи молча игнорируются MySQL - даже с InnoDB. Вы должны переместить их до конца.

Кроме того, ваш внешний ключ в таблице рабочих мест не может быть прав. Во-первых, в вашей таблице нет колонки job, поэтому FOREIGN KEY(JOB) REFERENCES JOB(END_DATE) не может быть прав.

Во-вторых, вы ссылаетесь на два разных определения PK в одну и ту же таблицу. Моя догадка вы на самом деле хотите:

CONSTRAINT START_END_DATE_FK 
    FOREIGN KEY (START_DATE, END_DATE) 
    REFERENCES JOB(START_DATE, END_DATE) 
ON UPDATE CASCADE 
ON DELETE SET NULL, 

Это предполагает, что (START_DATE, END_DATE) является первичным ключом таблицы JOB - которая звучит немного странно.

Не уверен, что comment является зарезервированным словом в MySQL. Если это так, вам нужно указать имя столбца.

Так поставить эту ALLtogether, вы, вероятно, нужно что-то вроде этого:

CREATE TABLE REPORT 
(
    REPORT_ID INTEGER NOT NULL PRIMARY KEY, 
    WORKER CHAR(30) , 
    CLIENT CHAR (30), 
    START_DATE DATE , 
    END_DATE DATE, 
    COMMENT CHAR(30), 
    CONSTRAINT WORKER_FK FOREIGN KEY(WORKER) REFERENCES WORKER(WORKER_ID) 
    ON UPDATE CASCADE 
    ON DELETE SET NULL, 
    CONSTRAINT CLIENT_FK FOREIGN KEY (client) REFERENCES CLIENT(CLIENT_ID) 
    ON UPDATE CASCADE 
    ON DELETE SET NULL, 
    CONSTRAINT START_END_DATE_FK FOREIGN KEY (START_DATE, END_DATE) REFERENCES JOB(START_DATE, END_DATE) 
    ON UPDATE CASCADE 
    ON DELETE SET NULL, 
    CONSTRAINT ENDDATE_FK FOREIGN KEY(JOB) REFERENCES JOB(END_DATE) 
    ON UPDATE CASCADE 
    ON DELETE SET NULL 
); 
1

Вы не определяет тип столбца для REPORT_ID. т.е. REPORT_ID int(11) NOT NULL PRIMARY KEY,

CREATE TABLE REPORT(
REPORT_ID int(11) NOT NULL PRIMARY KEY, 
    WORKER CHAR(30) CONSTRAINT WORKER_FK FOREIGN KEY(WORKER) REFERENCES WORKER(WORKER_ID) 
    ON UPDATE CASCADE 
    ON DELETE SET NULL, 
    CLIENT CHAR (30) CONSTRAINT CLIENT_FK FOREIGN KEY(client) REFERENCES CLIENT(CLIENT_ID) 
    ON UPDATE CASCADE 
    ON DELETE SET NULL, 
START_DATE DATE CONSTRAINT STARTDATE_FK FOREIGN KEY(JOB) REFERENCES JOB(START_DATE) 
    ON UPDATE CASCADE 
    ON DELETE SET NULL, 
    END_DATE DATE CONSTRAINT ENDDATE_FK FOREIGN KEY(JOB) REFERENCES JOB(END_DATE) 
    ON UPDATE CASCADE 
    ON DELETE SET NULL, 
    COMMENT CHAR(30) 
)engine innoDB; 
+0

'int (11)' бесполезно ('int' - это точно то же самое). И внешние ключи, определяемые таким образом *, будут * игнорироваться. –

+0

благодарит всех за то, что я разобрался и помог себе :) – Sean

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