2012-03-01 104 views
1

試圖用外鍵創建幾個新表,但我陷入了困境,這裏是代碼和我收到的錯誤,我認爲它有一些東西 用我的外鍵?MYSQL使用外鍵產生錯誤創建表

#1064 - You have an error in your SQL syntax; 
    check the manual that corresponds to your MySQL server version for the 
    right syntax to use near '(`CustomerID`), 
    ) ENGINE=InnoDB DEFAULT CHARSET=UTF8 AUTO_INCREMENT=1' at line 10 



DROP TABLE IF EXISTS `Customer`; 
CREATE TABLE `Customer` (

    `CustomerID`   INT UNSIGNED AUTO_INCREMENT, 
    `Customer_Number`  VARCHAR(100), 
    `Customer_Name`   VARCHAR(100), 
    `Website`    VARCHAR(255), 
    `Logo`     VARCHAR(100), 

    PRIMARY KEY(`CustomerID`) 
) ENGINE=InnoDB DEFAULT CHARSET=UTF8 AUTO_INCREMENT=1; 


    DROP TABLE IF EXISTS `Reports`; 
    CREATE TABLE `Reports` (

     `ReportsID`    INT UNSIGNED AUTO_INCREMENT, 
     `Role`     VARCHAR(70), 
     `Region`    VARCHAR(70), 
     `Inpection_Type`  VARCHAR(70), 
     `CustomerID`   INT UNSIGNED, 
     `Report_Date`   DATE NOT NULL DEFAULT '0000-00-00', 
     `Order_Date`   TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, 
     `Customer_Name`   VARCHAR(100), 
     `Customer_Division`  VARCHAR(70), 
     `Memo`     VARCHAR(255), 
     `Billing_Key`   VARCHAR(70), 

     PRIMARY KEY(`ReportsID`), 
     FOREIGN KEY (`CustomerID`) REFERENCES Customer(`CustomerID`) ON DELETE CASCADE ON UPDATE CASCADE 
    ) ENGINE=InnoDB DEFAULT CHARSET=UTF8 AUTO_INCREMENT=1; 

    DROP TABLE IF EXISTS `CustomerContact`; 
    CREATE TABLE `CustomerContact` (

     `ContactID`    INT UNSIGNED AUTO_INCREMENT, 
     `CustomerID`   INT UNSIGNED, 
     `Division`    VARCHAR(100), 
     `Contact`    VARCHAR(100), 
     `Address`    VARCHAR(255), 
     `Phone`     VARCHAR(100), 
     `Fax`     VARCHAR(100), 
     `Email`     VARCHAR(100), 
     `Mobile`    VARCHAR(100), 

     PRIMARY KEY(`ContactID`), 
     FOREIGN KEY (`CustomerID) REFERENCES Customer(`CustomerID`) ON DELETE CASCADE ON UPDATE CASCADE 
    ) ENGINE=InnoDB DEFAULT CHARSET=UTF8 AUTO_INCREMENT=1; 
+0

'Logo varchar()'和'primary key'之間缺少逗號嗎? – biziclop 2012-03-01 21:49:19

+0

@biziclop修復後效果相同 – ehime 2012-03-01 21:53:29

回答

1

你有後缺少逗號徽標列以及外鍵定義中CustomerID列名稱末尾的缺少反引號。

解決這些問題並重新運行DDL後,您會發現CustomerContact表沒有名爲CustomerID的列,因此您也應該添加該列。

DROP TABLE IF EXISTS `Customer`; 
    CREATE TABLE `Customer` ( 
     `CustomerID`   INT UNSIGNED AUTO_INCREMENT, 
     `Customer_Number`  VARCHAR(100), 
     `Customer_Name`   VARCHAR(100), 
     `Website`    VARCHAR(255), 
     `Logo`     VARCHAR(100), 
     PRIMARY KEY(`CustomerID`) 
    ) ENGINE=InnoDB DEFAULT CHARSET=UTF8 AUTO_INCREMENT=1; 


    DROP TABLE IF EXISTS `CustomerContact`; 
    CREATE TABLE `CustomerContact` (

     `ContactID`    INT UNSIGNED AUTO_INCREMENT, 
     `Division`    VARCHAR(100), 
     `Contact`    VARCHAR(100), 
     `Address`    VARCHAR(255), 
     `Phone`     VARCHAR(100), 
     `Fax`     VARCHAR(100), 
     `Email`     VARCHAR(100), 
     `Mobile`    VARCHAR(100), 
     PRIMARY KEY(`ContactID`), 
     CONSTRAINT FOREIGN KEY (`CustomerID`) REFERENCES Customer(`CustomerID`) ON DELETE CASCADE ON UPDATE CASCADE 
    ) ENGINE=InnoDB DEFAULT CHARSET=UTF8 AUTO_INCREMENT=1; 
0

你缺少一個逗號:

`Logo`     VARCHAR(100), 
    PRIMARY KEY(`CustomerID`) 

另外一個反勾到底:

CONSTRAINT FOREIGN KEY (`CustomerID`) REFERENCES Customer(`CustomerID`) ON DELETE CASCADE ON UPDATE CASCADE 
+0

我使用一些缺失的逗號更新了我的代碼,但結果相同 – ehime 2012-03-01 21:52:24

+0

最後一行中,您錯過了反引號(請參閱更新的響應) – 2012-03-01 21:56:19