Тъй като външните ключове трябва да съвпадат с типа данни на колоната, която препращат, има смисъл промяната на типа данни на колона да наруши външния ключ, който я препраща.
Изглежда, че MySQL има предпазна мярка срещу това и отказва опит за МОДИФИКАЦИЯ на колоната. Но не е достатъчно интелигентно, за да проверите дали конкретната модификация, която правите, всъщност ще промени типа на данните. Той просто отхвърля всеки опит за промяна на тази колона.
Можете да заобиколите това, като временно деактивирате проверките на външни ключове. Създадох отново вашата таблица и я потвърдих:
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;