Глава 5. Основы языка определения данных
Возможны несколько вариантов.
1. Удаление связанных строк из таблицы «Успеваемость», что означает, что при
отчислении студента будет удаляться вся история его успехов в учебе. Эта опе-
рация называется каскадным удалением, и для ее реализации в определение
внешнего ключа добавляются ключевые слова ON DELETE CASCADE.
Например:
CREATE TABLE progress
( record_book numeric( 5 ),
...
FOREIGN KEY ( record_book )
REFERENCES students ( record_book )
ON DELETE CASCADE
);
2. Запрет удаления строки из таблицы «Студенты», если в таблице «Успеваемость»
есть хотя бы одна строка, ссылающаяся на удаляемую строку в таблице «Сту-
денты». Для реализации такой политики в определение внешнего ключа до-
бавляются ключевые слова ON DELETE RESTRICT или ON DELETE NO ACTION.
Если в определении внешнего ключа не предписано конкретное действие, то
по умолчанию используется NO ACTION.
Оба эти варианта означают, что если в ссылающейся таблице, т. е. «Успевае-
мость», есть строки, ссылающиеся на удаляемую строку в таблице «Студенты»,
то операция удаления будет отменена, и будет выведено сообщение об ошибке.
Отличие между этими двумя вариантами лишь в том, что при использовании NO
ACTION можно отложить проверку выполнения ограничения на более поздний
строк в рамках транзакции, а в случае RESTRICT проверка выполняется немед-
ленно.
Поэтому если бы внешний ключ определили таким образом:
CREATE TABLE progress
( record_book numeric( 5 ),
...
FOREIGN KEY ( record_book )
REFERENCES students ( record_book )
ON DELETE RESTRICT
);
102
5.1. Значения по умолчанию и ограничения целостности
или таким:
Достарыңызбен бөлісу: |