-1
CREATE TABLE Child (
   chil_id INT AUTO_INCREMENT PRIMARY KEY NOT NULL,
   child_fname VARCHAR(20) NOT NULL,
   child_sname VARCHAR(20) NOT NULL,
   child_dob DATE NOT NULL,
   child_gender ENUM('M','F') DEFAULT 'M',
   parent_id INT NOT NULL),
 CONSTRAINT FOREIGN KEY (parent_id) references Parent (parent_id) )
 ENGINE=InnoDB;

错误信息:

您的 sql 语法有错误。检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法,以便在第 8 行的 'CONSTRAINT FOREIGN KEY(parent_id) references Parent (parent_id) ) ENGINE=InnoDB 附近使用

4

2 回答 2

1

问题出在这一行:

parent_id INT NOT NULL),

括号关闭列/约束声明,但在此之后包含一个约束,这会引发错误。删除那个括号,你应该被设置。正确的代码应该是这样的:

CREATE TABLE `Parent` (
  `parent_id` INT NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`parent_id`)
  ) Engine=InnoDB;

CREATE TABLE Child (
   chil_id INT AUTO_INCREMENT PRIMARY KEY NOT NULL,
   child_fname VARCHAR(20) NOT NULL,
   child_sname VARCHAR(20) NOT NULL,
   child_dob DATE NOT NULL,
   child_gender ENUM('M','F') DEFAULT 'M',
   parent_id INT NOT NULL,
 CONSTRAINT FOREIGN KEY (parent_id) references Parent (parent_id) )
 ENGINE=InnoDB;

显然,我在猜测 的表结构Parent,因为我只需要一个表来满足parent_id. 您可以验证这在fiddle中是否有效。

最后,您确实应该查看此答案中标题为“有关如何有条不紊地修复此类错误的更多信息”的部分,因为它会使调试CREATE TABLE语句对您来说更容易(正如之前所建议的那样

于 2012-07-26T13:23:20.883 回答
-1

你有太多的右括号。

行中的最后一个括号

CONSTRAINT FOREIGN KEY (parent_id) references Parent (parent_id) )

是多余的。删除它并重试。

于 2012-07-12T02:28:10.673 回答