#sql #oracle #oracle11g #attributes #foreign-keys
#sql #Oracle #oracle11g #атрибуты #внешние ключи
Вопрос:
Пытаюсь создать таблицу с помощью кода SQL, но получаю сообщение об ошибке:
Отсутствует ключевое слово
что касается внешнего ключа.
CREATE TABLE Staff
(
staffID VARCHAR(5) NOT NULL,
name VARCHAR(50),
position VARCHAR(30),
branchID VARCHAR(5),
PRIMARY KEY (staffID),
FOREIGN KEY (branchID) REFERENCES Branch ON UPDATE CASCADE
);
Ответ №1:
В отличие от других СУБД (например, MySQL), Oracle не поддерживает ON UPDATE
предложение во внешних ключах. Вам просто нужно будет удалить эту часть объявления.
Попробуйте:
CREATE TABLE Staff (
staffID VARCHAR(5) NOT NULL,
name VARCHAR(50),
position VARCHAR(30),
branchID VARCHAR(5),
PRIMARY KEY (staffID),
FOREIGN KEY (branchID) REFERENCES Branch(branchID) --ON UPDATE CASCADE
);
Логика такого поведения Oracle заключается в том, что указанный столбец не должен изменяться, поскольку он должен быть PRIMARY KEY
(или UNIQUE
столбцом). Я считаю, что это ограничение имеет смысл … они просто не хотят давать пользователям достаточно веревки, чтобы повеситься.
Комментарии:
1. Большое спасибо. Полностью имеет смысл, и не могу поверить, что это было так просто. Извините, я довольно новичок в SQL. Но спасибо за разъяснение!
2. Как насчет каскадных удалений? Я вижу ограничение обновлений по этой причине, но не удаляет.
3. @Omnifarious: да,
ON DELETE CASCADE
разрешено в Oracle. Смотрите документацию .4. @NicoleVelos: Добро пожаловать! Я могу гарантировать, что большинство из нас когда-то попадало в эту ловушку (я, по крайней мере, попал!).
5. @GMB: Итак, я попытался создать таблицу, но теперь у меня ошибка с указанием «таблица или представление не существует» — я так смущен этим сейчас.