2010-04-09 104 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,所以所有的外鍵規格將會被丟棄。