|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Этот раздел описывает различия в обработке' механизма хранения InnoDB внешних ключей по сравнению с тем из MySQL Server.
Определения внешнего ключа для InnoDB таблицы подвергаются следующим условиям:
InnoDB разрешает внешнему ключу ссылаться, любой
индексирует столбец или группу столбцов. Однако, в таблице, на которую ссылаются, должно быть
индексирование, где столбцы, на которые ссылаются, перечисляются как первые столбцы в том же самом порядке.
InnoDB в
настоящий момент не поддерживает внешние ключи для таблиц с определяемым пользователем разделением. Это
означает что не разделенный пользователем InnoDB таблица может содержать
ссылки внешнего ключа или столбцы, на которые ссылаются внешние ключи.
InnoDB позволяет ограничению внешнего ключа ссылаться
на групповой ключ. Это InnoDB расширение
стандартного SQL.
Справочные действия для внешних ключей InnoDB таблицы подвергаются следующим
условиям:
В то время как SET DEFAULT позволяется MySQL Server,
он отклоняется как недопустимое InnoDB. CREATE TABLE и ALTER TABLE операторы используя этот пункт не учитываются таблицы
InnoDB.
Если есть несколько строк в родительской таблице, у которых есть то же самое
значение ключа, на которое ссылаются, InnoDB действия во внешнем ключе
проверяют, как будто другие родительские строки с тем же самым значением ключа не существуют. Например,
если Вы определили a RESTRICT введите ограничение, и есть дочерняя строка с
несколькими родительскими строками, InnoDB не разрешает удаление любой из
тех родительских строк.
InnoDB выполняет располагающиеся каскадом операции
через алгоритм в глубину, основанный на записях в индексирует соответствие ограничениям внешнего ключа.
Если ON UPDATE CASCADE или ON
UPDATE SET NULL рекурсивно вызывает, чтобы обновить ту же самую
таблицу, которую это ранее обновило во время каскада, это действует как RESTRICT. Это означает, что невозможно использовать самосправочный ON UPDATE CASCADE или ON UPDATE SET NULL
операции. Это должно предотвратить бесконечные циклы, следующие из каскадных обновлений. Самосправочное
ON DELETE SET NULL, с другой стороны, возможно, как самосправочное ON DELETE CASCADE. Расположение каскадом операций не может быть вложено
больше чем 15 уровней глубоко.
Как MySQL вообще, в SQL-операторе, который вставляет, удаляет, или обновляет много
строк, InnoDB проверки UNIQUE и FOREIGN KEY ограничительная строка строкой. Выполняя проверки внешнего
ключа, InnoDB наборы совместно использованные блокировки на уровне строки
на дочернем элементе или родительских записях это должно смотреть на. InnoDB ограничения внешнего ключа проверок сразу; проверка не
задерживается к фиксации транзакции. Согласно стандарту SQL, поведение значения по умолчанию должно быть
задержано, проверяя. Таким образом, ограничения только проверяются после того, как весь SQL-оператор был обработан. До InnoDB
задержанная ограничительная проверка реализаций, некоторые вещи будут невозможны, таковы как удаление
записи, которая обращается к себе, используя внешний ключ.
Можно получить общую информацию о внешних ключах и их использовании от запросов INFORMATION_SCHEMA.KEY_COLUMN_USAGE таблица, и больше информации, более
определенной для InnoDB таблицы могут быть найдены в INNODB_SYS_FOREIGN и INNODB_SYS_FOREIGN_COLS таблицы, также в INFORMATION_SCHEMA
база данных. См. также Раздел 13.1.17.2, "Используя
FOREIGN KEY Ограничения".
В дополнение к SHOW ERRORS, в случае ошибочного включения внешнего ключа InnoDB
таблицы (обычно Ошибка 150 в MySQL Server), можно получить подробное объяснение нового InnoDB
ошибка внешнего ключа, проверяя вывод SHOW ENGINE
INNODB STATUS.