MS SQL Server

В MS SQL Server для задания ограничений FOREIGN KEY в разделе ограничений оператора CREATE TABLE используется следующий синтаксис:

<column_constraint> ::=
CONSTRAINT [<constraint_name>]
FOREIGN KEY (<index_col_name> [,….])
REFERENCES <referenced_table_name> (<index_col_name >[,…..])
[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]
[ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ]

Здесь constraint_name - имя внешнего ключа (задавать явно необязательно), index_col_name – имена столбцов входящих в состав внешнегоключа, referenced_table_name - имя таблицы, на которую ссылается ограничение FOREIGN KEY, index_col_name - столбец или список столбцов из таблицы на которую ссылается ограничение FOREIGN KEY.

В следующем примере показано ограничение FOREIGN KEY с одним столбцом в таблице order_shipment, ссылающееся на таблицу order_header

CREATE TABLE order_shipment
( ordship_ordhdr_id_fn INTEGER NOT NULL,
ordship_shipment_id_fn INTEGER NOT NULL,
CONSTRAINT fk_ordsh_ord FOREIGN KEY (ordship_ordhdr_id_fn)
REFERENCES order_header(ordhdr_id_n)
ON DELETE NO ACTION
ON UPDATE CASCADE)

Предложение ON DELETE определяет действия, предпринимаемые при попытке удаления первичного ключа, на который указывает внешний ключ. В предложении ON DELETE предусмотрены следующие параметры:

  • NO ACTION: удаления не произойдет и будет выведено сообщение об ошибке.
  • CASCADE: все строки с внешними ключами, указывающими на удаленную строку, также будут удалены.
  • SET NULL: всем строкам с внешними ключами, указывающими на удаленную строку, присваивается значение NULL.
  • SET DEFAULT: всем строкам с внешними ключами, указывающим на удаленную строку, присваивается установленное для них значение по умолчанию.

Предложение ON UPDATE определяет действия, предпринимаемые при попытке обновления первичного ключа, на который указывает внешний ключ. Это предложение также поддерживает параметры NO ACTION, CASCADE, SET NULL и SET DEFAULT.