2012-03-01 7 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

+0

@biziclop Тот же эффект после ремонта – ehime

ответ

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

+0

Линия в самом конце, вам не хватает обратного хода (см. Обновленный ответ) –

Смежные вопросы