Spec-Zone .ru
спецификации, руководства, описания, API

1.8.6.2. FOREIGN KEY Ограничения

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

MySQL поддерживает ON UPDATE и ON DELETE ссылки внешнего ключа в CREATE TABLE и ALTER TABLE операторы. Доступные справочные действия RESTRICT (значение по умолчанию), CASCADE, SET NULL, и NO ACTION.

SET DEFAULT также поддерживается MySQL Server, но в настоящий момент отклоняется как недопустимый InnoDB и NDB. Так как MySQL не поддерживает задержанную ограничительную проверку, NO ACTION обрабатывается как RESTRICT. Для точного синтаксиса, поддерживаемого MySQL для внешних ключей, см. Раздел 13.1.17.2, "Используя FOREIGN KEY Ограничения".

MATCH FULL, MATCH PARTIAL, и MATCH SIMPLE позволяются, но их использования нужно избежать, поскольку они заставляют MySQL Server игнорировать любого ON DELETE или ON UPDATE пункт используется в том же самом операторе. MATCH опции не имеют никакого другого эффекта в MySQL, который в действительности осуществляет MATCH SIMPLE полный рабочий день семантики.

MySQL требует, чтобы столбцы внешнего ключа были индексированы; если Вы составляете таблицу с ограничением внешнего ключа, но не индексируете на данном столбце, индексирование создается.

Можно получить информацию о внешних ключах от INFORMATION_SCHEMA.KEY_COLUMN_USAGE таблица. Пример запроса против этой таблицы показывают здесь:

mysql> SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME,
        CONSTRAINT_NAME      > FROM
        INFORMATION_SCHEMA.KEY_COLUMN_USAGE      > WHERE
        REFERENCED_TABLE_SCHEMA IS NOT NULL;+--------------+---------------+-------------+-----------------+| TABLE_SCHEMA | TABLE_NAME    | COLUMN_NAME | CONSTRAINT_NAME |+--------------+---------------+-------------+-----------------+| fk1          | myuser        | myuser_id   | f               || fk1          | product_order | customer_id | f2              || fk1          | product_order | product_id  | f1              |+--------------+---------------+-------------+-----------------+3 rows in set (0.01 sec)

Информация о внешних ключах на InnoDB таблицы могут также быть найдены в INNODB_SYS_FOREIGN и INNODB_SYS_FOREIGN_COLS таблицы, в INFORMATION_SCHEMA база данных.

В настоящий момент, только InnoDB таблицы поддерживают внешние ключи. См. Раздел 5.4.5,"InnoDB и FOREIGN KEY Ограничения", для информации, определенной для внешнего ключа, поддерживают в InnoDB.

Отклонения от Стандартов SQL

Реализация MySQL внешних ключей отличается от стандарта SQL в следующих ключевых отношениях:

Для получения информации, как InnoDB внешние ключи отличаются от стандарта SQL, видят Раздел 5.4.5,"InnoDB и FOREIGN KEY Ограничения" .