ошибка в синтаксисе mysql - PullRequest
       13

ошибка в синтаксисе mysql

1 голос
/ 09 апреля 2010

при выполнении следующего запроса я получаю сообщение об ошибке в синтаксисе рядом со строкой 9. Так как я использую инструментальные средства mysql, я не могу понять, что может быть не так:

CREATE  TABLE IF NOT EXISTS `proquotes`.`thquotes` (

  `idQuotes` INT NOT NULL AUTO_INCREMENT ,

  `vAuthorID` VARCHAR(8) CHARACTER SET 'utf8' NOT NULL ,

  `vAuthor` VARCHAR(45) CHARACTER SET 'utf8' NOT NULL ,

  `cQuotes` MEDIUMTEXT CHARACTER SET 'utf8' NOT NULL ,

  `cArabic` MEDIUMTEXT CHARACTER SET 'utf8' NOT NULL ,

  `vReference` VARCHAR(100) CHARACTER SET 'utf8' NOT NULL ,

  PRIMARY KEY (`idQuotes`) ,

  INDEX `vAuthorID` () ,

  CONSTRAINT `vAuthorID`

    FOREIGN KEY ()

    REFERENCES `proquotes`.`author_info` ()

    ON DELETE NO ACTION

    ON UPDATE NO ACTION)

DEFAULT CHARACTER SET = utf8;

таблица author_info:

CREATE  TABLE IF NOT EXISTS `proquotes`.`author_info` (  

`vAuthorID` INT NOT NULL ,  `vAuthor` VARCHAR(45) CHARACTER 

SET 'utf8' NOT NULL ,  `nQuotes` INT NOT NULL ,  PRIMARY KEY 

(`vAuthorID`) ,  UNIQUE INDEX `vAuthorID_UNIQUE` (`vAuthorID` 

ASC) )DEFAULT CHARACTER SET = utf8;

Ответы [ 3 ]

2 голосов
/ 09 апреля 2010

Синтаксическая ошибка выглядит как пустая скобка в: INDEX vAuthorID (), FOREIGN KEY () и REFERENCES proquotes.author_info (). Эти скобки должны ссылаться на один или несколько атрибутов таблицы.

Например:

INDEX `vAuthorID` (`vAuthorID`) ,
CONSTRAINT `vAuthorID`
   FOREIGN KEY (`vAuthorID`)
   REFERENCES `proquotes`.`author_info` (`vAuthorID`)

Последняя скобка для предложения REFERENCES должна ссылаться на атрибут в author_info, а не в thquotes. Поэтому вам может потребоваться изменить vAuthorID соответственно.

1 голос
/ 09 апреля 2010

Похоже, вам нужно имя столбца в скобках после ключевого слова INDEX?

См. http://dev.mysql.com/doc/refman/5.5/en/create-table.html.

0 голосов
/ 10 апреля 2010

Три очевидные ошибки - это отсутствие полей в ваших определениях INDEX и FOREIGN KEY. Вы должны указать одно или несколько полей для каждого, иначе это синтаксическая ошибка.

INDEX `vAuthorID` () ,  <--need a field here in the ()'s
CONSTRAINT `vAuthorID`
    FOREIGN KEY ()  <---another field here in the ()'s
    REFERENCES `proquotes`.`author_info` ()  <--and yet another field here in the ()'s

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...