У меня есть следующая основная таблица:
CREATE TABLE IF NOT EXISTS `table_1` (
`id` BIGINT UNSIGNED NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
И следующая таблица:
CREATE TABLE IF NOT EXISTS `table_2` (
`id_1` BIGINT UNSIGNED NOT NULL,
`id_2` BIGINT UNSIGNED NOT NULL,
PRIMARY KEY (`id_1`,`id_2`),
FOREIGN KEY (`id_1`) REFERENCES table_1(`id`) ON DELETE CASCADE,
FOREIGN KEY (`id_2`) REFERENCES table_2(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
По какой-то причине при создании вышеуказанных таблиц я получаю следующий индекс, автоматически созданный MYSQL:
Keyname Type Unique Packed Column Cardinality Collation Null
id_2 BTREE No No id_2 94695 A No
Таким образом, MYSQL создает индекс для второго столбца с именем id_2
в table_2
. Как ни странно, он не создается на обоих внешних ключах, и если я создам только 1 внешний ключ, MYSQL не создаст такой индекс.
Я попытался удалить индекс и получил следующую ошибку:
Cannot drop index 'id_2': needed in a foreign key constraint
Так зачем MYSQL создавать такой индекс и почему он создается на обоих ключах ??