В Innodb не может не быть первичного ключа. Если вы не укажите его, Mysql сделает это за вас. Сначала Mysql попытается взять первый уникальный индекс (UNIQUE INDEX). Если не получится — создаст скрытую колонку (из 6ти байт) и назначит ее первичным ключом
Во всех innodb таблицах всегда должен быть явно указан первичный ключ.
Зачем явно создавать колонку с первичным ключом, если она так и так будет создана?
Каждая таблица InnoDB имеет кластерный ключ. Каждая. Без исключения.
Гораздо интереснее, какие поля для этого выбираются.
Если в таблице задан PRIMARY KEY — это он
Иначе, если в таблице есть UNIQUE (уникальные) индексы — это первый из них
Иначе InnoDB самостоятельно создаёт скрытое поле с суррогатным ID размером в 6 байт
До третьего пункта лучше не доводить свой многострадальный сервер, и добавить таки ID самостоятельно.
И не забывайте, что InnoDB во вторичных ключах хранит полный набор значений полей кластерного ключа в качестве ссылки на конечную строку в таблице. Чем больше первичный ключ, тем больше вторичные ключи.