mysql语法错误
在执行以下查询时,我得到一个错误,即第9行附近的语法中存在错误。因为我使用的是mysql workbench,所以我无法真正找出可能的错误:mysql语法错误,mysql,syntax,foreign-keys,Mysql,Syntax,Foreign Keys,在执行以下查询时,我得到一个错误,即第9行附近的语法中存在错误。因为我使用的是mysql workbench,所以我无法真正找出可能的错误: CREATE TABLE IF NOT EXISTS `proquotes`.`thquotes` ( `idQuotes` INT NOT NULL AUTO_INCREMENT , `vAuthorID` VARCHAR(8) CHARACTER SET 'utf8' NOT NULL , `vAuthor` VARCHAR(45)
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;
表作者信息:
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;
语法错误似乎是以下位置的空括号:
索引vAuthorID()
,外键()
和引用proquotes.author\u info()
。这些括号应该引用一个或多个表属性
例如:
INDEX `vAuthorID` (`vAuthorID`) ,
CONSTRAINT `vAuthorID`
FOREIGN KEY (`vAuthorID`)
REFERENCES `proquotes`.`author_info` (`vAuthorID`)
REFERENCES
子句的最后一个括号应引用author\u info
中的属性,而不是来自thquotes
。因此,您可能需要相应地更改vAuthorID
。看起来您需要在索引
关键字后的括号中添加一个列名
请参阅。三个明显的错误是索引和外键定义中缺少字段。必须为每个字段指定一个或多个字段,否则这是一个语法错误
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
INDEX`vAuthorID`(),我做到了。现在它说:ERROR 1005:无法创建表'proquotes.thquotes'(errno:150)
@fusion:您使用的是哪个MySQL版本?您可能需要在author\u info.vAuthorID
上手动创建索引。来源:@fusion:。。。或者,可能author\u info.vAuthorID
与thquotes.vAuthorID
的数据类型不完全相同。来源:我已经用作者信息的sql查询更新了这个问题。请看一看。@fusion:好的,它看起来像新表中的vAuthorID
,thquotes
是VARCHAR(8)
,但在author\u info
表中是INT
。它们必须是相同的数据类型。其中一个需要改变。如果要更改thquotes
表,请尝试将vAuthorID VARCHAR(8)字符集'utf8'非空,
替换为vAuthorID INT非空,