2012-07-11 83 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)。

相關問題