Составители:
Рубрика:
Пусть в момент исполнения предложения
INSERT INTO Отдел
VALUES (7, "Бухгалтерия", 17, "Управление", 1930);
в таблице СОТРУДНИК (рис. 2.1) еще не добавлена строка для сотрудника с
идентификационным номером Ид_Сотр=17. Заметим, что в таблице СОТРУДНИК
(рис. 2.1) столбец Ид_Сотр определен как первичный (PRIMARY) ключ. В таблице
ОТДЕЛ (рис. 2.2) первичным ключом должен быть определен атрибут (столбец)
Ид_Отдела.
Атрибут Ид_Начальника не может быть определен первичным ключом по
определению. SQL запрещает иметь более одного (реляционного первичного) ключа
в таблице. Поэтому атрибут Ид_Начальника получает статус внешнего (FOREIGN)
ключа для указания системе о необходимости поддержания ссылочной целостности
между таблицами СОТРУДНИК (рис. 2.1) и ОТДЕЛ (рис. 2.2), который по определению
не может содержать NULL значения.
Поэтому для схемы базы данных, с указанными
ограничениями ссылочной целостности выполнить команду без ее нарушения нельзя.
Другими словами, до тех пор, пока не появится начальник для нового создаваемого
отдела, информацию об отделе нельзя занести в базу данных.
Проблемы, возникающие при использовании внешних ключей, подробно
рассмотрены в литературе [1, 6, 23, 30]. Здесь только подчеркнем, что
операция INSERT
может нарушить непротиворечивость базы данных. Если не принять специальных мер,
то СУБД, основываясь только на знаниях первичных и внешних ключей отношений,
может допустить ссылку на несуществующую запись. Отметим, что не все СУБД имеют
механизмы для предотвращения ввода записей со значениями внешних ключей,
отсутствующих среди значений соответствующих первичных ключей.
6.2.2. Добавление нескольких строк
Команду INSERT также можно использовать, чтобы получать или выбирать
значения из одной таблицы и помещать их в другую. Для этого ее надо использовать
вместе с запросом. Формат команды в этом случае:
INSERT
INTO {имя базовой таблицы | представление} [(список столбцов)]
VALUES (
предложение_SELECT);
Страницы
- « первая
- ‹ предыдущая
- …
- 134
- 135
- 136
- 137
- 138
- …
- следующая ›
- последняя »
