Проблема с MySQL, не может добавить ограничение внешнего ключа - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь создать таблицу с именем встречи, хотя, когда я пытаюсь ее создать, я получаю сообщение об ошибке:

Невозможно добавить ограничение внешнего ключа

MyКод SQL выглядит следующим образом:

 CREATE TABLE APPOINTMENT(
    APNo VARCHAR(5),
    PNo VARCHAR(5), 
    DNo VARCHAR(5),
    APDATE DATETIME
);

ALTER TABLE APPOINTMENT
    ADD PRIMARY KEY (APNo),
    ADD FOREIGN KEY (PNo) REFERENCES PATIENT(PNo),
    ADD FOREIGN KEY (DNo) REFERENCES DOCTOR(DNo)
;

1 Ответ

0 голосов
/ 03 марта 2019

Ваш синтаксис выглядит нормально.Вы не показываете DDL для ссылочных таблиц PATIENT и DOCTOR, однако, вероятно, ошибка возникает из-за того, что не выполняется одно из требований к внешним ключам MySQL.

Цитаты из документации :

Соответствующие столбцы во внешнем ключе и ссылочном ключе должны иметь одинаковые типы данных.

Необходимо убедиться, что оба значения DOCTOR(DNo) и PATIENT(PNo)VARCHAR(5).

MySQL требует индексов для внешних ключей и ссылочных ключей.[...] Такой индекс создается в ссылочной таблице автоматически, если он не существует.

В идеале DOCTOR(DNo) и PATIENT(PNo) должны быть первичным ключом соответствующих таблиц.Иначе, для каждого из них должен существовать индекс (это может быть индекс из нескольких столбцов, в котором указанный столбец появляется один раз).


См. эту базу данных did fiddle для рабочего примера:

CREATE TABLE PATIENT(PNo VARCHAR(5) PRIMARY KEY);
CREATE TABLE DOCTOR(DNo VARCHAR(5) PRIMARY KEY);

CREATE TABLE APPOINTMENT(
    APNo VARCHAR(5),
    PNo VARCHAR(5), 
    DNo VARCHAR(5),
    APDATE DATETIME
);

ALTER TABLE APPOINTMENT
    ADD PRIMARY KEY (APNo),
    ADD FOREIGN KEY (PNo) REFERENCES PATIENT(PNo),
    ADD FOREIGN KEY (DNo) REFERENCES DOCTOR(DNo)
;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...