Может ли кто-нибудь пролить свет на этот вопрос? что на самом деле делает этот индекс технически и при каких условиях он создается? Потому что, видимо,
- его можно удалить, не затрагивая активное ограничение.
- оно остается на столе даже после удаления ограничение.
Код: Выделить всё
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;

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

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

Этот индекс можно удалить, не влияя на наличие или работу ограничения. Таким образом, похоже, что он сам по себе не имеет никакой функциональности.
Отказ от ограничения
Код: Выделить всё
ALTER TABLE `orders` DROP FOREIGN KEY `orders.orderCustomerId__customers.customerId_FK`;
Примечание: Re -добавление ограничения с предыдущим именем будет работать безупречно и не приведет к коллизиям или дублированию индекса.
Есть ли идеи о том, почему ADD CONSTRAINT делает это?
Подробнее здесь: https://stackoverflow.com/questions/793 ... ping-an-fk