此CREATE TABLE语句中的语法错误在哪里?

时间:2012-07-11 23:49:56

标签: mysql

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服务器版本,以便在'CONSTRAINT附近使用正确的语法   FOREIGN KEY(parent_id)引用Parent(parent_id))ENGINE = InnoDB   在第8行

2 个答案:

答案 0 :(得分: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

最后,你真的应该看看this answer标题为"的部分。 有关如何有条不紊地修复此类错误的更多信息",因为它可以让您更轻松地调试CREATE TABLE语句(如建议before )。

答案 1 :(得分:-1)

你的括号太多了。

该行的最后一个括号

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

是多余的。删除它,然后再试一次。