Spec-Zone .ru
спецификации, руководства, описания, API
|
Для оптимальной производительности с операторами DML InnoDB требует, чтобы индексирование существовало на
столбцах внешнего ключа, так,
чтобы UPDATE
и DELETE
операции на родительской
таблице могут легко проверить, существуют ли соответствующие строки в дочерней
таблице. MySQL создает или отбрасывает такой, индексирует автоматически при необходимости, как побочный
эффект CREATE TABLE
, CREATE
INDEX
, и ALTER TABLE
операторы.
Когда Вы отбрасываете индексирование, проверки InnoDB, не используется ли индексирование для того, чтобы проверить ограничение внешнего ключа. Нормально все еще отбрасывать индексирование, если есть, другой индексирует, который может использоваться, чтобы осуществить то же самое ограничение. InnoDB препятствует, Вы отбросить последнее индексируете, который может осуществить определенное ограничение по внешнему ключу.
Сообщение, которое сообщает об этом состоянии ошибки:
ERROR 1553 (HY000): Cannot drop index 'fooIdx
':needed in a foreign key constraint
Это сообщение является более дружественным чем более раннее сообщение, которое оно заменяет:
ERROR 1025 (HY000): Error on rename of './db2/#sql-18eb_3
'to './db2/foo
'(errno: 150)
Подобное изменение в сообщении об ошибке применяется к попытке отбросить первичный ключ, индексируют. Для таблиц
без явного PRIMARY KEY
, InnoDB создает неявный кластерный
индекс, используя первые столбцы таблицы, которые объявляются UNIQUE
и
NOT NULL
. Когда Вы отбрасываете такой индексировать, InnoDB автоматически копирует
таблицу и восстанавливает индексировать использование различного UNIQUE NOT NULL
группа столбцов или сгенерированного системой ключа. Так как эта работа изменяет первичный ключ, она использует
медленный метод копирования таблицы и воссоздания индексирования, а не Быстрого метода Создания индекса от Раздела 5.5.6, "Детали реализации Онлайнового
DDL".
Ранее, попытка отбросить неявный кластерный индекс (первое UNIQUE NOT NULL
индексируйте), отказавший, если таблица не содержала a PRIMARY KEY
:
ERROR 42000: This table type requires a primary key