Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

Ограничения типа FOREIGN KEY

Ограничения типа FOREIGN KEY (внешний ключ) объявляются для одного или нескольких столбцов таблицы, ссылающихся на столбец с ограничением UNIQUE или PRIMARY KEY другой таблицы. (Внешний ключ может ссылаться на значение с признаком уникальности или на первичный ключ в той же таблице, где он находится сам, но такие ключи встречаются редко.) После этого внешние ключи могут предотвратить ввод в таблицу данных, для которых нет соответствующих значений в связанной таблице. Внешние ключи являются главными способами определения взаимосвязи таблиц в реляционной базе данных. Вот некоторые правила, касающиеся внешних ключей.

  • В одной таблице могут одновременно существовать несколько внешних ключей.
  • Внешний ключ можно объявить для определения ссылки на первичный ключ или на значение с признаком уникальности для установления прямой связи между двумя таблицами.

Ключевые слова, общие с объявлением стандартного ограничения, описаны выше в разделе «Синтаксис». Ключевые слова, специфические для внешних ключей, описаны в следующем перечне.

FOREIGN KEY (локальный столбец [, …])

В создаваемой или изменяемой таблице объявляется один или несколько столбцов, к которым применяется ограничение типа FOREIGN KEY. Эта конструкция используется только при объявлениях уровня таблицы и опускается при объявлениях уровня столбца. Мы рекомендуем делать так, чтобы порядковое место и тип данных каждого столбца в списке локальный столбец сравнительно совпадали с порядковым положением и типом данных столбцов списка связанный столбец.

REFERENCES связанная таблица [(связанный столбец [, …])].

Называется таблица и, где нужно, столбец (столбцы), хранящий допустимый для внешнего ключа список значений. Связанный столбец должен уже быть определен в предложениях NOT DEFERRABLE PRIMARY KEY или NOT DEFERRABLE UNIQUE KEY. Типы таблиц должны совпадать. Например, если одна таблица является временной локальной таблицей, то они обе должны быть временными и локальными.

MATCH (FULL | PARTIAL | SIMPLE).

Определяет необходимую степень совпадения связывающего (локального) столбца и связанного (внешнего) столбца при наличии в столбцах значений NULL.

FULL

Совпадение является приемлемым, если: 1) ни один из связывающих столбцов не равен NULL и все значения совпадают со всеми значениями связанного

— Внешний ключ уровня таблицы [CONSTRAINT [имя_ограничения]] FOREIGN KEY

(локальный_столбец [, …]) REFERENCES связанная_таблица [(связанный_столбец [, …])] [MATCH {FULL | PARTIAL | SIMPLE}]

[ON UPDATE {NO ACTION j CASCADE | RESTRICT | SET NULL | SET DEFAULT J] [ON DELETE {NO ACTION |CASCADE | RESTRICT ; SET NULL | SET DEFAULT}] [откладывание_ограничения] [время_откладывания]

— Внешний ключ уровня столбца [CONSTRAINT [имя_ограничения]]

REFERENCES связанная таблица [(связанный_столбец [, …])] [MATCH {FULL | PARTIAL | SIMPLE}]

[ON UPDATE {NO ACTION | CASCADE | RESTRICT > SET NULL | SET DEFAULT}] ON DELETE {NO ACTION]

CASCADE | RESTRICT | SET NULL | SET DEFAULT}] [отклаживание_ограничения] [время_откладывания]

Полный синтаксис SQL 2003 для внешних ключей более сложен, чем общий синтаксис ограничений, показанный ранее, и он также зависит от того, объявляете вы его на уровне таблицы или на уровне столбца.

PARTIAL

Совпадение является приемлемым, если по меньшей мере один из связывающих столбцов равен NULL, а остальные совпадают с соответствующими значениями связанного столбца.

SIMPLE

Совпадение является приемлемым, когда любое значение в связывающем столбце равно NULL или совпадает с соответствующим значением связанного столбца. Этот вид совпадения принимается по умолчанию.

ON UPDATE

Указывает, что в том случае, если операция обновления UPDATE захватывает один или несколько связанных_столбцов первичного или уникального ключа в связанной таблице, следует выполнить соответствующее действие, чтобы ссылочная целостность данных внешних ключей не была нарушена. Предложение ON UPDATE можно объявить отдельно или же вместе с предложением ON DELETE. Если предложение опущено, по умолчанию принимается ON UPDATE NO ACTION.

ON DELETE

Указывает, что в том случае, если операция удаления DELETE захватывает один или несколько связанных_столбцов первичного или уникального ключа в связанной таблице, следует выполнить соответствующее действие, чтобы ссылочная целостность данных внешних ключей не была нарушена. Предложение ON DELETE можно объявить отдельно или же вместе с предложением ON UPDATE. Если предложение опущено, по умолчанию принимается ON DELETE NO ACTION.

NO ACTION | CASCADE | RESTRICT | SET NULL | SET DEFAULT

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

NO ACTION

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

CASCADE

Указывает, что в том случае, если изменяется или удаляется значение первичного или уникального ключа, база данных выполняет то же самое действие (то есть удаление или обновление) над внешним ключом.

RESTRICT

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

SET NULL

Указывает, что в случае изменения или удаления первичного или уникального ключа база данных установит значение внешнего ключа в NULL.

SET DEFAULT

Указывает, что в случае изменения или удаления первичного или уникального ключа база данных устанавливает для внешнего ключа значение по умолчанию (используя заданные вами для столбцов значения по умолчанию).

Как и в примере кода с первичными ключами, этот общий синтаксис можно использовать и для внешних ключей уровня столбцов, и для внешних ключей уровня таблицы. Заметьте, что ограничения уровня столбцов и уровня таблицы работают совершенно одинаково. Они просто определяются на разных уровнях команды CREATE TABLE. В следующем примере мы создадим одностолбцовый внешний ключ в столбце salesrep, который будет ссылаться на столбец empid таблицы employee. Мы создадим этот внешний ключ двумя способами, сначала на уровне столбца, а потом на уровне таблицы.

Источник