MySQL/InnoDB: причина индекса столбца в таблице при добавлении (и удалении) ограничения FKMySql

Форум по Mysql
Ответить Пред. темаСлед. тема
Anonymous
 MySQL/InnoDB: причина индекса столбца в таблице при добавлении (и удалении) ограничения FK

Сообщение Anonymous »

При создании ограничения простого внешнего ключа (FK) между двумя таблицами иногда в таблице создается индекс с именем созданного ограничения.
Может ли кто-нибудь пролить свет на этот вопрос? что на самом деле делает этот индекс технически и при каких условиях он создается? Потому что, видимо,
  • его можно удалить, не затрагивая активное ограничение.
  • оно остается на столе даже после удаления ограничение.
Пример: Даны две таблицы:

Код: Выделить всё

CREATE TABLE `customers` (
`customerId` int(10) UNSIGNED NOT NULL,
`customerName` varchar(255) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
ALTER TABLE `customers` ADD PRIMARY KEY (`customerId`);

CREATE TABLE `orders` (
`orderId` int(10) UNSIGNED NOT NULL,
`orderCustomerId` int(10) UNSIGNED NOT NULL,
`orderName` varchar(255) NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_unicode_ci;
ALTER TABLE `orders` ADD PRIMARY KEY (`orderId`);
Добавление следующего ограничения:

Код: Выделить всё

ALTER TABLE `orders`
ADD CONSTRAINT `orders.orderCustomerId__customers.customerId_FK` FOREIGN KEY (`orderCustomerId`) REFERENCES `customers` (`customerId`) ON DELETE RESTRICT ON UPDATE RESTRICT;
Правильно создает активное ограничение, что видно в представлении отношений этой таблицы в phpMyAdmin:
Изображение

и он также указан в каталоге ограничений INFORMATION_SCHEMA.TABLE_CONSTRAINTS:
Изображение

Индекс рассматриваемый объект находится в самой таблице, индексируя столбец с ограничением и используя то же имя, что и созданное ограничение:
Изображение

Этот индекс можно удалить, не влияя на наличие или работу ограничения. Таким образом, похоже, что он сам по себе не имеет никакой функциональности.
Отказ от ограничения

Код: Выделить всё

ALTER TABLE `orders` DROP FOREIGN KEY `orders.orderCustomerId__customers.customerId_FK`;
оставляет конец индекса таблицы, что может указывать на наличие активного ограничения FK, хотя его нет.
Примечание: Re -добавление ограничения с предыдущим именем будет работать безупречно и не приведет к коллизиям или дублированию индекса.
Есть ли идеи о том, почему ADD CONSTRAINT делает это?

Подробнее здесь: https://stackoverflow.com/questions/793 ... ping-an-fk
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «MySql»