Проблема с MySQL, не может добавить ограничение внешнего ключа

public static void main(String[] args) {

    Scanner in = new Scanner(System.in);
    System.out.println("Enter array size = ");
    int size=in.nextInt();
    int[] n = new int[size];
    System.out.println("Enter "+ size +" values ");

    for(int i=0;i<n.length;i++)
        n[i] = in.nextInt();
    int small=n[0],ssmall=n[0];

    // finding small and second small
    for(int i=0;i<n.length;i++){
        if(small>n[i]){
            ssmall=small;
            small=n[i];
            }else if(ssmall>n[i])
                ssmall=n[i];
    }

    // finding second small if first element itself small
    if(small==n[0]){
        ssmall=n[1];
        for(int i=1;i<n.length;i++){
            if(ssmall>n[i]){
                ssmall=n[i];
                }
        }
    }

    System.out.println("Small "+ small+" sSmall "+ ssmall);

    in.close();
}
1
задан GMB 2 March 2019 в 21:44
поделиться

1 ответ

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

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

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

Вы должны убедиться, что DOCTOR(DNo) и PATIENT(PNo) равны VARCHAR(5).

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

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


См. эту скрипту дБ для рабочего примера:

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)
;
0
ответ дан GMB 2 March 2019 в 21:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: