2010-04-09 106 views
1

在执行以下查询时,出现错误,说明第9行附近出现语法错误。由于我使用的是mysql工作台,因此我无法弄清楚什么可能是错误的: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; 

回答

2

的语法错误似乎是括号空处:INDEX vAuthorID()FOREIGN KEY()REFERENCES proquotes.author_info()。这些括号应引用一个或多个表格属性。

例如:

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

最后括号为REFERENCES子句从thquotesauthor_info中应该引用一个属性,而不是。因此您可能需要相应地更改vAuthorID

+0

我做到了。现在它说:'错误1005:无法创建表'proquotes.thquotes'(errno:150)' – input 2010-04-09 17:49:29

+0

@fusion:你使用的是什么MySQL版本?您可能需要在'author_info.vAuthorID'上手动创建一个索引。资料来源:http://forums.mysql.com/read.php?22,19755,19755#msg-19755 – 2010-04-09 17:56:04

+0

@fusion:...否则,它可能是'author_info.vAuthorID'不是完全相同的数据类型作为'thquotes.vAuthorID'。来源:http://www.devdaily.com/blog/post/mysql/mysql-error-1005-hy000 – 2010-04-09 17:58:24

0

三个明显的错误是缺少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,所以所有的外键规格将会被丢弃。