2010-04-09 13 views
1

lors de l'exécution de la requête suivante, j'obtiens une erreur qu'il y a une erreur dans la syntaxe près de la ligne 9. Puisque j'utilise mysql workbench, je ne peux pas vraiment comprendre ce qui pourrait être:erreur dans la syntaxe 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; 

Table 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; 

Répondre

2

l'erreur de syntaxe semble être la parenthèse vide à: INDEX vAuthorID(), FOREIGN KEY() et REFERENCES proquotes.author_info(). Ces parenthèses doivent référencer un ou plusieurs attributs de table.

Par exemple:

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

La dernière parenthèse pour la clause REFERENCES devrait faire référence à un attribut dans author_info, et non de thquotes. Par conséquent, vous devrez peut-être changer vAuthorID en conséquence.

+0

Je l'ai fait. maintenant il dit: 'ERROR 1005: Impossible de créer une table 'proquotes.thquotes' (errno: 150)' – input

+0

@fusion: Quelle version de MySQL utilisez-vous? Vous devrez peut-être créer un index manuellement sur 'author_info.vAuthorID'. Source: http://forums.mysql.com/read.php?22,19755,19755#msg-19755 –

+0

@fusion: ... Ou bien, il se peut que 'author_info.vAuthorID' ne soit pas exactement le même type de données comme 'thquotes.vAuthorID'. Source: http://www.devdaily.com/blog/post/mysql/mysql-error-1005-hy000 –

0

Les trois erreurs évidentes sont un manque de champs dans vos définitions INDEX et FOREIGN KEY. Vous devez spécifier un ou plusieurs champs pour chacun, sinon c'est une erreur de syntaxe.

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 

Vous aussi ne pas spécifier quel moteur base de données à utiliser, ce qui signifie généralement MySQL utilisera MyISAM, donc toutes vos spécifications clés étrangères seront supprimés en silence.