Все языки программирования позволяют писать резервы:
<?php
$foo = 'bar';
$foo = 'bar';
Это всего лишь пример, вы, очевидно, могли бы иметь дублирующийся код, дублирующие функции или дублирующие структуры данных, которые были бы гораздо более расточительными.
Вы должны написать хороший код, и это зависит от ситуации. Возможно, в редких случаях есть веская причина написать что-то, что кажется излишним. В этом случае вы были бы так же расстроены, если бы технология не позволяла вам это сделать.
Вас может заинтересовать инструмент под названием Maatkit, который представляет собой набор необходимых инструментов для пользователей MySQL. Один из его инструментов проверяет наличие дубликатов ключей:
http://www.maatkit.org/doc/mk-duplicate-key-checker.html
Если вы являетесь разработчиком, новичком или экспертом MySQL, вам следует скачать Maatkit сразу и выделить целый день для чтения документации, опробовать каждый инструмент в наборе и узнать, как интегрировать их в свою повседневную разработку задачи. Вы пинаете себя за то, что не сделали этого раньше.
Что касается именования индексов, это позволяет вам сделать это:
ALTER TABLE testkey DROP KEY `id`, DROP KEY `id_2`;
Если бы они не были названы, у вас не было бы возможности отбросить отдельные индексы. Вам придется отбросить всю таблицу и воссоздать ее без индексов.