Код ошибки: 1215 Невозможно добавить ограничение внешнего ключа при запуске сценария в MySQL Workbench версии 6.3.

0

Прежде всего, я извиняюсь, что имена таблиц и т.д. Находятся на другом языке.

Этот вопрос я не могу добавить внешний ключ с именем ID_KOPIE из таблицы KOPIA_KNIHY в таблицу Skład по какой - то причине. Когда он получает добавление внешнего ключа в таблицу SKLAD, он выдает ошибку 1215. Вот код:

CREATE TABLE BOOK (
    BOOK_NAME VARCHAR(30)     NOT NULL,
    YEAR      CHAR(4)         NOT NULL,
    NAME_OF_EDITOR   VARCHAR(30)     NOT NULL,    
    WRITER_ID INTEGER NOT NULL,
    ISBN        VARCHAR(17)     NOT NULL,
    BOOK_ID    INTEGER         NOT NULL,
    PRIMARY KEY (BOOK_ID),
);
CREATE TABLE BOOK_COPY(
    BOOK_ID INTEGER NOT NULL,
    LANGUAGE_CODE CHAR(3) NOT NULL,
    COPY_ID INTEGER NOT NULL,
    BOOK_PICTURES CHAR(1) NOT NULL 
        CHECK (BOOK_PICTURES IN ("Y", "N")),
    PRIMARY KEY (BOOK_ID, LANGUAGE_CODE, COPY_ID)
    FOREIGN KEY(BOOK_ID)
        REFERENCES BOOK(BOOK_ID),
);
CREATE TABLE STORAGE (
    BOOK_ID INTEGER NOT NULL,
    COPY_ID INTEGER NOT NULL,
    BUILDING_ID INTEGER NOT NULL,
    ROOM_NUMBER NUMERIC(4,0) NOT NULL,
    SHELF_NUMBER NUMERIC(4,0) NOT NULL,
    PRIMARY KEY(BOOK_ID, BUILDING_ID, COPY_ID),
    FOREIGN KEY(COPY_ID)
        REFERENCES BOOK_COPY(BOOK_ID),
)

Я исследовал код ошибки 1215 в Интернете, я не нашел ничего плохого в моей базе данных. Я проверил, есть ли опечатка или я не забыл добавить ссылку.

Это ошибка:

0   769 18:19:37    CREATE TABLE STORAGE (
    BOOK_ID INTEGER NOT NULL,
    COPY_ID INTEGER NOT NULL,
    BUILDING_ID INTEGER NOT NULL,
    ROOM_NUMBER NUMERIC(4,0) NOT NULL,
    SHELF_NUMBER NUMERIC(4,0) NOT NULL,
    PRIMARY KEY(BOOK_ID, BUILDING_ID, COPY_ID),
    FOREIGN KEY(COPY_ID)
        REFERENCES BOOK_COPY(BOOK_ID),
)
Error Code: 1215. Cannot add foreign key constraint 0.016 sec

Мой вопрос в том, как это можно зафиксировать, что это сработает.

Помощь будет принята с благодарностью.

  • 0
    Пожалуйста, добавьте запрос, который вызвал упомянутую ошибку.
  • 0
    Установите ID_KOPIE как INDEX в вашей таблице KOPIA_KNIHY .
Показать ещё 13 комментариев
Теги:
database
mysql-workbench

1 ответ

0
Лучший ответ

Попробуйте это. Пожалуйста, ON UPDATE... ON DELETE синтаксис ON UPDATE... ON DELETE в этом примере с тем, который вам нужен.

CREATE TABLE 'KNIHA' (
'NAZOV_KNIHY' VARCHAR(30)     NOT NULL,
'ROK_PRVEHO_VYDANIA' CHAR(4)         NOT NULL,
'NAZOV_VYDAVATELA'   VARCHAR(30)     NOT NULL,    
'ID_AUTORA' INTEGER NOT NULL,
'ISBN'        VARCHAR(17)     NOT NULL,
'ID_KNIHY'    INTEGER         NOT NULL,
PRIMARY KEY ('ID_KNIHY')
);
CREATE TABLE 'KOPIA_KNIHY' (
'ID_KNIHY' INTEGER NOT NULL,
'KOD_JAZYKA' CHAR(3) NOT NULL,
'ID_KOPIE' INTEGER NOT NULL,
'ORAZKY_V_KNIHE' CHAR(1) NOT NULL 
CHECK ('OBRAZKY_V_KNIHE' IN ("A", "N")),
INDEX('ID_KOPIE'),
PRIMARY KEY ('ID_KNIHY', 'KOD_JAZYKA', 'ID_KOPIE'),
CONSTRAINT 'idx_1' FOREIGN KEY 'idx_1' ('ID_KNIHY') REFERENCES 'KNIHA'('ID_KNIHY') ON UPDATE CASCADE ON DELETE CASCADE
);

CREATE TABLE 'SKLAD' (
'ID_KNIHY' INTEGER NOT NULL,
'ID_KOPIE' INTEGER NOT NULL,
'ID_BUDOVY' INTEGER NOT NULL,
'CISLO_MIESTNOSTI' NUMERIC(4,0) NOT NULL,
'CISLO_REGALU' NUMERIC(4,0) NOT NULL,
PRIMARY KEY('ID_KNIHY', 'ID_BUDOVY', 'ID_KOPIE'),
CONSTRAINT 'idx_2' FOREIGN KEY 'idx_2' ('ID_KOPIE') REFERENCES 'KOPIA_KNIHY'('ID_KOPIE') ON UPDATE CASCADE ON DELETE CASCADE,
CONSTRAINT 'idx_3' FOREIGN KEY 'idx_3' ('ID_KNIHY') REFERENCES 'KNIHA'('ID_KNIHY') ON UPDATE CASCADE ON DELETE CASCADE
);

Попробуйте на SQL Fiddle

,

  • 0
    «Обработка ссылок на внешние ключи на неуникальные ключи или ключи, которые содержат значения NULL, недостаточно хорошо определена для таких операций, как UPDATE или DELETE CASCADE. Рекомендуется использовать внешние ключи, которые ссылаются только на ключи UNIQUE (включая PRIMARY) и NOT NULL». dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html

Ещё вопросы

Сообщество Overcoder
Наверх
Меню