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
.