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

1.8.5.4. Различия во Внешнем ключе

InnoDB механизм хранения поддерживает проверку ограничений внешнего ключа, включая CASCADE, ON DELETE, и ON UPDATE. См. Раздел 5.4.5,"InnoDB и FOREIGN KEY Ограничения".

Для механизмов хранения кроме InnoDB, MySQL Server анализирует FOREIGN KEY синтаксис в CREATE TABLE операторы, но не использует или хранит это. В будущем реализация будет расширена, чтобы хранить эту информацию в табличном файле спецификации так, чтобы это могло быть получено mysqldump и ODBC. На более позднем этапе ограничения внешнего ключа будут реализованы для MyISAM таблицы также.

Осуществление внешнего ключа предлагает несколько преимуществ разработчикам базы данных:

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

MySQL дает разработчикам базы данных выбор, которого приближаются, чтобы использовать. Если Вы не нуждаетесь во внешних ключах и хотите избежать издержек, связанных с осуществлением ссылочной целостности, можно выбрать другой механизм хранения вместо этого, такой как MyISAM. (Например, MyISAM механизм хранения предлагает очень быструю производительность для приложений, которые выполняют только INSERT и SELECT операции. В этом случае у таблицы нет никаких дыр в середине, и вставки могут быть выполнены одновременно с извлечениями. См. Раздел 8.10.3, "Параллельные Вставки".)

Если Вы хотите не использовать в своих интересах проверки ссылочной целостности, помните следующие соображения:

Знайте, что использование внешних ключей может иногда приводить к проблемам:

Внешние ключи в SQL используются, чтобы проверить и осуществить ссылочную целостность, не к объединяющим таблицам. Если Вы хотите получить следствия многократных таблиц от a SELECT оператор, Вы делаете это, выполняя соединение между ними:

SELECT * FROM t1 INNER JOIN t2 ON t1.id = t2.id;

См. Раздел 13.2.9.2,"JOIN Синтаксис", и Раздел 3.6.6, "Используя Внешние ключи".

FOREIGN KEY синтаксис без ON DELETE ... часто используется приложениями ODBC, чтобы произвести автоматический WHERE пункты.