2016-09-23 2 views
0

Я новичок в MySQL и ранее использовал Microsoft Access для SQL. Когда я пытаюсь добавить модель на сервер ([Database] -> [Синхронизировать модель]), сгенерированный автоматически SQL код выдает эту ошибкуОшибка 1064 в MySQL Workbench при синхронизации модели с сервером

Executing SQL script in server 
ERROR: Error 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 ') 

REFERENCES `medicineproblems`.`SleepTimes`() 
    ON DELETE NO ACTION 
    ' at line 7 
SQL Code: 
     CREATE TABLE IF NOT EXISTS `medicineproblems`.`Records` (
      `Date` DATE NOT NULL, 
      `SleepDuration` DECIMAL NOT NULL DEFAULT 0, 
      `MoodAverage` DECIMAL NOT NULL DEFAULT 0, 
      PRIMARY KEY (`Date`), 
      CONSTRAINT `SleepDuration` 
      FOREIGN KEY() 
      REFERENCES `medicineproblems`.`SleepTimes`() 
      ON DELETE NO ACTION 
      ON UPDATE NO ACTION, 
      CONSTRAINT `MoodAverage` 
      FOREIGN KEY() 
      REFERENCES `medicineproblems`.`Mood`() 
      ON DELETE NO ACTION 
      ON UPDATE NO ACTION) 
     ENGINE = InnoDB 
     DEFAULT CHARACTER SET = utf8 

SQL script execution finished: statements: 5 succeeded, 1 failed 

Fetching back view definitions in final form. 
Nothing to fetch 

Я хочу, чтобы иметь возможность знать, что пошло не так. Итак, в ваших ответах, можете ли вы рассказать мне возможные причины ошибки, чтобы я мог попытаться ее избежать?

ответ

1

Вам не хватает имени столбца для ссылки на эту таблицу, а также столбец, на который будет ссылаться, и, следовательно, ошибка указывает. Ниже линии

 FOREIGN KEY() 
     REFERENCES `medicineproblems`.`SleepTimes`() 

Должно быть

FOREIGN KEY(some_column_name) 
REFERENCES `medicineproblems`.`SleepTimes`(some_column_name) 

Точно так же вы должны исправить это в следующей части вашего синтаксиса CREATE TABLE

 CONSTRAINT `MoodAverage` 
     FOREIGN KEY() 
     REFERENCES `medicineproblems`.`Mood`() 

Смотрите MySQL Documentation для получения дополнительной информации. Правильный синтаксис:

[CONSTRAINT [symbol]] FOREIGN KEY 
    [index_name] (index_col_name, ...) 
    REFERENCES tbl_name (index_col_name,...) 
    [ON DELETE reference_option] 
    [ON UPDATE reference_option] 
+0

Спасибо. Вы думаете, что будет предупреждение или что-то, если имя столбца опущено. –

+1

@JamesYeoman Был. Он ожидает имя после '(', но он получил ')' вместо этого, поэтому он говорит, что там есть синтаксическая ошибка. – Barmar

+0

@Barmar Я лично ожидал, что такое предупреждение появится, когда вы создадите ссылку в таблице, но не указываете ссылку –

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