MySQL Server

В My SQL Server проверка ограничений ссылочной целостности поддерживаются только в таблицах InnoDB. Для задания ограничений в операторе CREATE TABLE используется следующий синтаксис

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

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

В следующем примере создается таблица parent с полем id определенным в качестве первичного ключа. В таблице child определяется поле внешнего ключа parent_id, кот орое будет использовано для создание связи с таблицей parent.

CREATE TABLE parent(id INT NOT NULL, PRIMARY KEY (id)) TYPE=INNODB;
REATE TABLE child
(id INT, parent_id INT,
FOREIGN KEY (parent_id)
REFERENCES parent(id)
ON DELETE SET NULL)
TYPE=INNODB;

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

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

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