2014-11-15 2 views
0

Я продолжаю получать эту ошибку в своем скрипте, когда запускаю ее на phpMyAdmin.Номер ошибки SQL # 1215 - Невозможно добавить внешний ключ

 #1215 - Cannot add foreign key constraint 

Он появляется на этой таблице только там, где у меня есть два внешних ключа.

 CREATE TABLE WORK_LOG (
    ORD_ID    INT(4), 
    EMP_ID    INT(4), 
    HOUR_SLOT   NUMERIC(2), 
    EMP_COMMENT  VARCHAR(255), 
    CONSTRAINT WORK_LOG_FOREIGN_KEY_ODR_ID FOREIGN KEY (ORD_ID) REFERENCES WORK_ORDER (ORD_ID), 
    CONSTRAINT WORK_LOG_FOREIGN_KEY_EMP_ID FOREIGN KEY (EMP_ID) REFERENCES EMPLOYEES (EMP_ID)); 

Вот таблицы, которые я использовал в этом разделе, считали, что это может быть полезно при поиске проблемы.

 CREATE TABLE WORK_ORDER (
    ORD_ID    INT(4) AUTO_INCREMENT, 
    CLI_ID    INT(4), 
    ORD_DOI   DATE, 
    APPROVED   BOOLEAN, 
    DESCRIP   VARCHAR(255), 
    COST_TYPE   BOOLEAN, 
    TOTAL_COST   NUMERIC(10,2), 
    ORD_CONDITIONS  VARCHAR(255), 
    ORD_COMMENTS  VARCHAR(255), 
    CONSTRAINT WORK_ORDER_PRIMARY_KEY_ORD_ID PRIMARY KEY (ORD_ID), 
    CONSTRAINT WORK_ORDER_FOREIGN_KEY_CLI_ID FOREIGN KEY (CLI_ID) REFERENCES CLIENTS (CLI_ID), 
    CONSTRAINT ORD_ZERO CHECK (ORD_ID > 0)); 
    ALTER TABLE WORK_ORDER AUTO_INCREMENT=1001; 

    CREATE TABLE WORK_LOG (
    ORD_ID    INT(4), 
    EMP_ID    INT(4), 
    HOUR_SLOT   NUMERIC(2), 
    EMP_COMMENT  VARCHAR(255), 
    CONSTRAINT WORK_LOG_FOREIGN_KEY_ORD_ID FOREIGN KEY (ORD_ID) REFERENCES WORK_ORDER (ORD_ID), 
    CONSTRAINT WORK_LOG_FOREIGN_KEY_EMP_ID FOREIGN KEY (EMP_ID) REFERENCES EMPLOYEES (EMP_ID)); 

    CREATE TABLE EMPLOYEES (
    EMP_ID    INT(4) AUTO_INCREMENT, 
    EMP_NAME   VARCHAR(255), 
    EMP_LOC   VARCHAR(255), 
    PHONE_NO   NUMERIC(11), 
    BILLING_RATE  NUMERIC(10,2), 
    PAY_RATE   NUMERIC(10,2), 
    CONSTRAINT EMPLOYEES_PRIMARY_KEY_EMP_ID PRIMARY KEY (EMP_ID), 
    CONSTRAINT EMP_ZERO CHECK (EMP_ID > 0)); 
    ALTER TABLE EMPLOYEES AUTO_INCREMENT=1001; 

Надеюсь, кто-то может мне помочь!

Thanks

+2

Вы добавляете таблицы в указанном порядке? Потому что «Сотрудники», вероятно, должны существовать до ссылки. – mabi

+0

его всегда самая очевидная вещь! Спасибо за вашу помощь! Я чувствую себя идиотом сейчас haha ​​ – willemorley

+0

Этот вопрос был вызван простой типографской ошибкой. Хотя подобные вопросы могут быть по-теме здесь, этот вопрос был разрешен таким образом, который вряд ли поможет будущим читателям. – Kermit

ответ

1

Ваш порядок создания таблицы должен быть следующим. Убедитесь, что таблица EMPLOYEES и WORK_ORDER была создана до WORK_LOG, так как таблица WORK_LOG ссылается на них обоих. См. Успешную демонстрацию здесь http://sqlfiddle.com/#!2/36348b

CREATE TABLE EMPLOYEES (
EMP_ID    INT(4) AUTO_INCREMENT, 
EMP_NAME   VARCHAR(255), 
EMP_LOC   VARCHAR(255), 
PHONE_NO   NUMERIC(11), 
BILLING_RATE  NUMERIC(10,2), 
PAY_RATE   NUMERIC(10,2), 
CONSTRAINT EMPLOYEES_PRIMARY_KEY_EMP_ID PRIMARY KEY (EMP_ID), 
CONSTRAINT EMP_ZERO CHECK (EMP_ID > 0)); 


CREATE TABLE WORK_ORDER (
    ORD_ID    INT(4) AUTO_INCREMENT, 
    CLI_ID    INT(4), 
    ORD_DOI   DATE, 
    APPROVED   BOOLEAN, 
    DESCRIP   VARCHAR(255), 
    COST_TYPE   BOOLEAN, 
    TOTAL_COST   NUMERIC(10,2), 
    ORD_CONDITIONS  VARCHAR(255), 
    ORD_COMMENTS  VARCHAR(255), 
    CONSTRAINT WORK_ORDER_PRIMARY_KEY_ORD_ID PRIMARY KEY (ORD_ID),  
    CONSTRAINT ORD_ZERO CHECK (ORD_ID > 0)); 


CREATE TABLE WORK_LOG (
ORD_ID    INT(4), 
EMP_ID    INT(4), 
HOUR_SLOT   NUMERIC(2), 
EMP_COMMENT  VARCHAR(255), 
CONSTRAINT WORK_LOG_FOREIGN_KEY_ORD_ID FOREIGN KEY (ORD_ID) 
REFERENCES WORK_ORDER (ORD_ID), 
CONSTRAINT WORK_LOG_FOREIGN_KEY_EMP_ID FOREIGN KEY (EMP_ID) 
REFERENCES EMPLOYEES (EMP_ID)); 
Смежные вопросы