Étant donné que les clés étrangères doivent correspondre au type de données de la colonne à laquelle elles font référence, il est logique que la modification du type de données d'une colonne soit susceptible de perturber la clé étrangère qui y fait référence.
Il semble que MySQL dispose d'une protection contre cela et refuse une tentative de MODIFIER la colonne. Mais ce n'est pas assez intelligent pour vérifier si la modification spécifique que vous apportez changera en fait le type de données. Il refuse simplement toute tentative de modification de cette colonne.
Vous pouvez contourner ce problème en désactivant temporairement les vérifications de clé étrangère. J'ai recréé votre tableau et l'ai confirmé :
mysql> ALTER TABLE person MODIFY person_id SMALLINT UNSIGNED AUTO_INCREMENT;
ERROR 1833 (HY000): Cannot change column 'person_id': used in a foreign key constraint 'favorite_food_ibfk_1' of table 'test.favorite_food'
mysql> set foreign_key_checks=0;
Query OK, 0 rows affected (0.00 sec)
mysql> ALTER TABLE person MODIFY person_id SMALLINT UNSIGNED AUTO_INCREMENT;
Query OK, 0 rows affected (0.08 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> set foreign_key_checks=1;