2012-07-11 267 views
0
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; 

错误消息:这个CREATE TABLE语句中的语法错误在哪里?

您的SQL语法错误。检查对应 你的MySQL服务器版本使用附近的“约束 外键(PARENT_ID)引用父(PARENT_ID))ENGINE = InnoDB的 在第8行

+0

什么是错误信息?你为什么认为这是错的? – 2012-07-11 23:53:38

+0

这是错误消息''您的sql语法中有错误。查看与您的MySQL服务器版本对应的手册,以便在'CONSTRAINT FOREIGN KEY(parent_id)引用Parent(parent_id)'附近使用的正确语法'ENGINE = InnoDB at line 8' – Azeezat 2012-07-12 00:12:49

+0

这是ChildTable Name的主表:\t Child Attribute名称\t数据类型\t要求\t重点 child_id \t INT AUTO_INCREMENT \t NOT NULL \t主要 child_fname \t VARCHAR(20)\t NOT NULL \t child_sname \t VARCHAR(20)\t NOT NULL \t child_dob \t DATE \t NOT NULL \t child_gender \t ENUM(“M”,“F”)\t NOT NULL \t PARENT_ID \t INT \t NOT NULL \t外国 – Azeezat 2012-07-12 00:25:12

回答

-1

你有太多的密切括号正确的语法手册。

就行

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

最后托架是多余的。删除它,然后重试。

+0

你测试了你的解决方案吗?该括号不是问题,因为即使删除它,该语句仍然失败。 – 2012-07-26 13:53:08

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)。