Пытаюсь разобраться в вопросе, но нахожу только решения вопроса, а не объяснение почему так.
Имеется 2 таблицы:
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
CREATE TABLE `items` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(10) unsigned NOT NULL,
`number` int(10) unsigned NOT NULL,
`title` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
UNIQUE KEY `user_id_number_unique` (`user_id`,`number`),
CONSTRAINT `items_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
Она заполняется данными, всё хорошо.
Вдруг я осознал, что мне не нужна колонка number в таблице items.
Чтобы её удалить, я сначала должен удалить свой составной уникальный индекс.
Но почему-то MySQL не даёт мне это сделать просто так, без танцев с бубном.
Ввожу запрос:
DROP INDEX user_id_number_unique ON items;
На что получаю ошибку
Cannot drop index 'user_id_number_unique': needed in a foreign key constraint.
И мне приходится сначала удалять внешний ключ (который у меня items_ibfk_1 из примера выше), удалять индекс user_id_number_unique, удалять поле number и снова возвращать внешний ключ.
Я не могу понять, чем мешает внешний ключ?